AND型訊號量

2021-10-03 14:46:45 字數 668 閱讀 2473

避免出現多個資源共享導致的死鎖,那麼在每個程序把需要的各種資源都得到並完成計算之後釋放,另乙個程序也在拿到需要的全部資源之後計算,這樣就不會出現交叉使用資源的情況。每個程序把需要的全部資源拿到後才會進入臨界區。

那麼wait操作就需要改變:

wait(s1, s2, …, sn)

else

}}

s1到sn都表示所需資源,資源數都大於1,對每個資源進行--表示資源被占用,分配好資源之後跳出迴圈,wait操作結束。如果其中某個資源si得不到滿足,會執行else中的內容:把程序放進si關聯的阻塞佇列中,然後程式計數器把指標移向wait操作開始。(wait操作是原語,遵循要執行都執行,執行不了就從頭重新執行)

and型訊號量的signal操作:

signal(s1, s2, …, sn)

}}

signal操作表示的是釋放資源,把s1到sn全部資源釋放,並且把s1到sn關聯的阻塞佇列全部置空,阻塞佇列中的程序直接排程到就緒佇列中。

and型訊號量滿足了 「多種資源,數量為1」的使用情景,但是實際上還會有多種資源數量不固定的情景,and型訊號量顯然處理不了這種情況的程序排程。為了解決多資源多數量的情況,出現了訊號量集。

傳送門:整型訊號量、記錄型訊號量、訊號量集

整型訊號量與記錄型訊號量

訊號量機構是一種功能較強的機制,可用來解決互斥與同步的問題,它只能被兩個標準的原語wait s 和signal s 來訪問,也可以記為 p操作 和 v操作 原語是指完成某種功能且不被分割不被中斷執行的操作序列,通常可由硬體來實現完成不被分割執行特性的功能。如前述的 test and set 和 sw...

計數型訊號量

目錄 計數型訊號量 1.create 2.delete 3.wait 4.post 5.clear 6.status 7.getname 計數型訊號量通常用於多個執行緒共享使用某資源。下圖 乙個 sylixos 計數型訊號量可以呼叫 lw semaphorec create 函式進行建立。inclu...

訊號量 二值訊號量

訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...