信號量是什么?
信號量的基本應用
實現(xiàn)多個進程互斥(注意點)
(1)互斥信號量mutex初值為1结闸;
(2)每個進程中將臨界區(qū)代碼置于P(mutex)和V(mutex)原語之間
(3)必須成對使用P和V原語(在同一進程中)辩诞,不能次序錯誤坎弯、重復或遺漏:
? ? ? ? 遺漏P原語則不能保證互斥訪問
? ? ? ? 遺漏V原語則不能在使用臨界資源之后將其釋放(給其他等待的進程);
實現(xiàn)進程間的前趨關系(有序)(注意點)
信號量值為0的點是限制的關鍵所在译暂;
成對使用P和V原語(在有先后關系的兩個進程中)抠忘,不能次序錯誤、重復或遺漏外永,否則同步順序出錯崎脉。
區(qū)別整型、記錄型伯顶、AND型信號量以及信號量集
(1)整型信號量(符合“有限等待”原則,不符合“讓權等待”原則)
信號量定義為一個整型量囚灼;
根據(jù)初始情況賦相應的值骆膝;
僅能通過兩個原子操作來訪問。
P操作 wait(S):
? ? ? ? ? ? ? While S<=0 do no-op;
? ? ? ? ? ? ? S:=S-1;
V操作? signal(S): ?
? ? ? ? ? ? ? S:=S+1;
(2)記錄型信號量
信號量結構信息發(fā)生變化
不僅要有值的處理灶体,還有隊列的處理阅签。
此時形成記錄型數(shù)據(jù)結構,包括兩部分:
整型變量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)信號量集
在大于可分配設置的下界值t前提下破花,每次可分配d個。