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);