信號量semaphore

相對於自旋鎖,信號量的最大特點是允許調用它的線程可以進入休眠,這意味着試圖獲得某一信號量的進程會導致處理器擁有權的喪失,也即出現進程的切換。

驅動程序中定義了一個信號量,不是直接對其賦值,而是應該使用 sema_init(struct semaphore *sema, int val )進行初始化,初始化吧信號量的自旋鎖設置爲unlock, count = val,同事初始化表頭。

信號量結構體:

struct semaphore {

spinlock_t lock;

unsighned int count;

struct list_head wait_list;

}

down操作:判斷是否可以進入臨界區,count>0,可以進入,count --,

內核中down操作函數有

void down(struct semaphore *sem);//除非必要,一般不使用

void down_interrputable(struct semaphore *sem);//一般使用這個

void down_killable(struct semaphore *sem);

void down_trylock(struct semaphore *sem);//獲得信號量返回0;無法獲得信號量,返回1

void down_timeout(struct semaphore *sem);


up操作

進行up(),如果信號量sem的wait_list爲空,則沒有其他的進程在等待該信號量,count++;如果wait_list 不爲空,說明有其他的進程在等待信號量,此時調用_up()喚醒進程。

即使不是信號量的擁有者也可以UP操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章