Linux semaphore 閱讀筆記

2022-08-13 18:00:25 字數 1105 閱讀 4855

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...