天天看點

核心态信号量(todo)

void sema_init (struct semaphore *sem, int val);

void init_MUTEX (struct semaphore *sem); //将sem的值置為1,表示資源空閑

void init_MUTEX_LOCKED (struct semaphore *sem); //将sem的值置為0,表示資源忙

void down(struct semaphore * sem);

該函數用于獲得信号量sem,它會導緻睡眠,是以不能在中斷上下文(包括IRQ上下文和softirq上下文)使用該函數。該函數将把sem的值減1,如果信号量sem的值非負,就直接傳回,否則調用者将被挂起,直到别的任務釋放該信号量才能繼續運作。

int down_interruptible(struct semaphore * sem);

該函數功能與down類似,不同之處為,down不會被信号(signal)打斷,但down_interruptible能被信号打斷,是以該函數有傳回值來區分是正常傳回還是被信号中斷,如果傳回0,表示獲得信号量正常傳回,如果被信号打斷,傳回-EINTR。

int down_trylock(struct semaphore * sem); // 非阻塞函數,不會睡眠。無法鎖定資源則馬上傳回

void up(struct semaphore * sem);

上一篇: HMP排程器