信號量是什么?
信號量的基本應(yīng)用
實現(xiàn)多個進程互斥(注意點)
(1)互斥信號量mutex初值為1;
(2)每個進程中將臨界區(qū)代碼置于P(mutex)和V(mutex)原語之間
(3)必須成對使用P和V原語(在同一進程中),不能次序錯誤、重復(fù)或遺漏:
? ? ? ? 遺漏P原語則不能保證互斥訪問
? ? ? ? 遺漏V原語則不能在使用臨界資源之后將其釋放(給其他等待的進程);
實現(xiàn)進程間的前趨關(guān)系(有序)(注意點)
信號量值為0的點是限制的關(guān)鍵所在;
成對使用P和V原語(在有先后關(guān)系的兩個進程中),不能次序錯誤、重復(fù)或遺漏,否則同步順序出錯。
區(qū)別整型、記錄型、AND型信號量以及信號量集
(1)整型信號量(符合“有限等待”原則,不符合“讓權(quán)等待”原則)
信號量定義為一個整型量;
根據(jù)初始情況賦相應(yīng)的值;
僅能通過兩個原子操作來訪問。
P操作 wait(S):
? ? ? ? ? ? ? While S<=0 do no-op;
? ? ? ? ? ? ? S:=S-1;
V操作? signal(S): ?
? ? ? ? ? ? ? S:=S+1;
(2)記錄型信號量
信號量結(jié)構(gòu)信息發(fā)生變化
不僅要有值的處理,還有隊列的處理。
此時形成記錄型數(shù)據(jù)結(jié)構(gòu),包括兩部分:
整型變量value(代表資源數(shù)目)
進程鏈表L(鏈接所有等待進程)
P、V操作也有所變化(熟練使用記錄集型信號量,其wait,signal具體做了什么?)
P操作wait():?S.value = S.value - 1;if? S.value < 0? then? block(S,L)
V操作signal(): S.value = S.value + 1;? if? S.value <= 0 then wakeup(S,L)
(3)AND型信號量
解決思想:一次性分配給進程所需資源,用完一起釋放。Wait操作時對它所有需要的資源都要判斷,有AND條件,故稱“AND同步”、“同時wait”。
(4)信號量集
在大于可分配設(shè)置的下界值t前提下,每次可分配d個。