include/linux/semaphore.h
kernel/semaphore.c
struct semaphore ;
訊號量本質上是乙個計數器。count不為0時程序可以獲得訊號量,count為0時程序無法獲得訊號量,因而可能進入休眠。
當count初始為1時,其作用類似於互斥量mutex。但linux中的mutex實現機制已經不再使用semaphore,而使用另一套更簡單有效的方法。
訊號量用於資源可以同時被多個程序使用時的場景。
void sema_init(struct semaphore *sem, int val);
用val初始訊號量的count。
void down(struct semaphore *sem);
獲得訊號量。如果無法獲得則程序進入休眠,直到該訊號量在其他地方被釋放。不推薦使用此函式,因為其在休眠時將程序狀態置為task_uninterruptible.
int down_interruptible(struct semaphore *sem);
同down()函式,但休眠時將程序狀態置為task_interruptible。此時程序雖然休眠,但可以被訊號中斷。此時down_interruptible()函式返回-eintr。
int down_killable(struct semaphore *sem);
同down()函式,但休眠時程序狀態為task_killable,即程序休眠時仍可被某些訊號殺死。
int down_trylock(struct semaphore *sem);
同down(),但無法獲得訊號量時立即返回1,而不是使程序休眠。
int down_timeout(struct semaphore *sem, long jiffies);
同down(),但在jiffies時間超時後還無法獲得訊號時,則函式返回-etime.
void up(struct semaphore *sem);
釋放訊號量。
semaphore的wait_list成員用於記錄正在等待此訊號量的程序。
__down_common()函式做了程序休眠工作:設定程序狀態state,然後使用schedule_timeout()將cpu換出。
閱文與掌閱的真假繁華
高爾基說過 書籍是人類進步的階梯 雨果說過 書籍便是這種改造靈魂的工具。人類所需要的,是富有啟發性的養料。而閱讀,則正是這種養料 列夫 托爾斯泰說過 理想的書籍是智慧型的鑰匙 這般說說書籍或者說閱讀重要性的名言警句不在少數。那麼,問題來了 你們在看書的時候是更喜歡看紙質書還是電子書?關於這個問題,相...
object detection目標檢測閱讀記錄
1,一開始,利用神經網路以滑動視窗的形式對進行目標檢測,如overfeat。其原理即是用不同大小的視窗在上滑動,每個視窗對應乙個待檢測類別元素的正確率。2,接下來的方法是rcnn方法,此方法先利用傳統的影象分割技術對影象進行輪廓分割,再對每個分割出的部分用神經網路進行計算其正確率,此方法大部分 對其...
SynchronousQueue原始碼閱讀心得
synchronousqueue 簡寫為sq 同步佇列中,讀執行緒與寫執行緒只有相互匹配時才能完成一次完整的讀寫操作。而讀與寫的匹配依賴於transferqueue或transferstack中的transfer sq中重要的資料結構有transferqueue和transferstack,還有qn...