由dijkstra提出,目前已廣泛應用於單處理機和多處理機系統以及計算機網路中。
一、整形訊號量
1.s:乙個用於表示資源數目的整型量;
2.與一般整型量不同,除初始化外,僅能通過兩個標準的原子操作:wait(s)和signal(s);長期以來一直被稱為p、v操作;
3.wait操作偽碼描述:
wait(s
)
4.signal操作偽碼描述:
signal(s
)
5.上述兩個操作是原子操作,執行時不可中斷。即:當乙個程序在修改某訊號量時其他程序不可同時對該訊號量進行修改;在wait操作中,對s值的測試和做s=s-1操作均不可中斷;
6.wait操作中,只要s<=0,就會不斷進行測試;未遵循「讓權等待」準則,程序一直處於「忙等」狀態。
二、記錄型訊號量
1.偽碼描述:
typedef structsemaphore;
/*記錄型訊號量機制中,s->value的初值表示系統中某類資源的數目,又稱資源訊號量*/
wait
(semaphore *s)
/*對訊號量的每次signal操作表示執行程序釋放乙個單位資源,使系統中可供分配的該類資源數增加乙個*/
/*如果s->value的初值為1,表示只允許乙個程序訪問臨界資源,此時的訊號量轉化為互斥訊號量,用於程序互斥*/
signal
(semaphore *s)
2.記錄型訊號量由於採用記錄型資料結構得名;
3.該機制遵循了「讓權等待」準則;但會出現多個程序等待訪問同一臨界資源的情況,即死鎖狀態,程序同時要求共享地資源愈多,發生程序死鎖地可能性愈大。
三、and型訊號量
1.and同步機制基本思想:將程序在整個執行過程中需要的所有資源,一次性全部地分配給程序,待程序使用後再一起釋放;即:對若干個臨界資源地分配採取原子操作方式,要麼把它所請求地資源全部分配到程序,要麼乙個也不分配;類似於分治法思想;
2.可在一定程度上避免死鎖現象地發生;
3.偽碼描述:
swait(s1
,s2,…,sn)
else}}
ssignal(s1
,s2,…,sn)
}}
4.當一次需要n個單位時,and型訊號量效率較低,甚至會增加死鎖概率;
5.在有些情況下,為確保系統的安全性,當所申請某類資源數量低於某一下限值時,必須進行管制不予分配;當程序申請某類臨界資源時,在每次分配之前都必須測試資源的數量,判斷是否大於可分配的下限值,決定是否予以分配。
四、訊號量集
1.訊號量集思想:對and訊號量機制進行補充,對程序所申請地所有資源以及每類資源不同地資源需求量,在一次p、v原語操作中完成申請或釋放;
2.程序對訊號量si的測試值不再是1,而是該資源分配下限ti,即要求si>=ti,否則不予分配;一旦允許分配,程序對該資源的需求量為di,即表示資源占有量,進行si=si-di操作;
3.swait和ssignal格式:
swait(s1
,t1,d1,…,sn,tn,dn)
;ssignal(s1
,d1,…,sn,dn)
;
4.訊號量集的幾種特殊情況:
1>swait(s,d,d)——訊號量集中只有一訊號量s,但允許每次申請d個資源,現有資源數swait(s,1,1)——訊號量集蛻化為一般的記錄型訊號量(s>1)或互斥訊號量(s=1);
3>swait(s,1,0)——s>=1時允許多個程序進入某特定區;s變為0後,將阻止任何程序進入特定區;即:相當於乙個可控開關。
程序同步工具之 訊號量機制
程序同步 程序互斥的兩種機制,這裡簡單總結是其中的訊號量機制 semaphores 建議 不少概念涉及到程序同步的內容,所以檢視這個內容時可以結合或提前參考程序同步的內容,訊號量機制是 荷蘭學者 dijkstra 提出的,這是一種卓有成效的程序同步工具。發展 整型訊號量 記錄型訊號量 and 型訊號...
程序同步與訊號量
對於多個程序訪問共享資料,需要程序進行同步合作完成操作。我們可以使用訊號量來描述共享資料。struct semaphore p semaphore s v semaphore s 這樣的話當我們訪問共享資料時,我們可以先呼叫p操作,訪問結束後呼叫v操作,這樣就可以當成程序同步的目的。使用訊號量的問題...
程序同步與訊號量
二.訊號量臨界區保護 三.訊號量的 實現 訊號量是用來記錄可用資源或等待執行緒數目的一種特殊的整形變數。通過對訊號量的修改,使得各個程序得以有序推進,完成程序同步。訊號量的 定義 struct semaphore兩種基本操作 當程序申請消費資源時執行p函式。首先將資源數目value減一,然後判斷va...