Linux核心 訊號量

2021-10-10 19:37:08 字數 416 閱讀 7945

linux訊號量是一種睡眠鎖。如果有乙個任務試圖獲得乙個不可用(已經被占用)的訊號量時,訊號量會將其推入乙個等待佇列,然後讓其睡眠。這時處理器可以重獲自由,從而去執行其他**。當持有的訊號量可用(被釋放)後,處於等待佇列中的那個任務被喚醒,並獲得該訊號量。

舉例說明:

當某個人來到門前,他抓取鑰匙,進入房間。

當另外乙個人來到門前的時候,發現沒有了鑰匙,他不會在門口徘徊等待,而是把自己的名字寫入乙個列表中,然後就打盹去了。

當房間裡面的人出來的時候,就會到門口檢視一下列表,如果列表上有名字,就找到列表上的第乙個名字的人把他叫醒,讓他進入房間。

在這種方式中,鑰匙(相當於訊號量)確保一次只有乙個人(相當於執行執行緒)進入房間(相當於臨界區)。

這個方式比自旋鎖提供了更好的處理器利用率。

訊號量比自旋鎖有更大的開銷。

核心 訊號量

核心訊號量和自旋鎖類似,作用也是保護資料。不同之處是,程序獲取核心訊號量嘚瑟時候,如果不能獲取,則程序進入睡眠狀態。down dev sem up dev sem 核心訊號量和自旋鎖的不同 1 核心訊號量 不能用在 中斷處理函式 和 tasklet 等不可睡眠的場景 2 深層次的原因 linux核心...

linux核心同步 4 訊號量

任務獲取乙個已經被占用的訊號量,訊號量將其推進乙個等待佇列,然後讓其睡眠,cpu 去執行其他 當持有訊號量的程序將訊號釋放,處於等待佇列彙總的任務被喚醒,並獲取訊號量。訊號量會引起睡眠,所以在中斷上下文中不能使用訊號量。一般在程序上下文中使用。乙個程序占用訊號量的同時不能同時占用自旋鎖,因為占用訊號...

linux2 6核心訊號量學習

訊號量 semaphore 是用於保護臨界區的一種常用方法。只有得到訊號量的程序才能執行臨界區 而沒有得到訊號量的程序進入休眠等待狀態。linux 系統中與訊號量相關的操作主要有如下4種。1 定義訊號量 下面 定義名為 sem的訊號量。struct semaphore sem struct sema...