PV操作实例分析
//PV兩個(gè)字母是荷蘭文 Passeren(通過(guò)),Vrijgeven(釋放)的簡(jiǎn)稱。
? ?
剛開(kāi)始學(xué)習(xí)操作系統(tǒng)的時(shí)候,就聽(tīng)說(shuō)PV操作,簡(jiǎn)單說(shuō)說(shuō)PV操作。
●??P(S):?S=S-1?
? ? ? ? ? ?如果S≥0,則該進(jìn)程繼續(xù)執(zhí)行;
? ? ? ? ? ? ? S<0,進(jìn)程暫停執(zhí)行,放入信號(hào)量的等待隊(duì)列
?
● ?V(S): S=S+1
? ? ? ? ? ? 如果S>0,則該進(jìn)程繼續(xù)執(zhí)行;
? ? ? ? ? ?? ? ?S≤0,?喚醒等待隊(duì)列中的一個(gè)進(jìn)程
? ? 到底怎么分析,下面看看一個(gè)具體的問(wèn)題:
? ??
首先設(shè)信號(hào)量S1,S2,其中
S1,表示是否允許司機(jī)啟動(dòng)汽車(chē),其初值為0,
S2,表示是否允許售票員開(kāi)車(chē)門(mén),初值為O;
? ? ? ? ??
● 分析:
? ? 司機(jī)進(jìn)程:
? ? ? ? ? ? P:S1=S1-1?得:S1=0-1=-1<0 司機(jī)進(jìn)程暫停執(zhí)行,放入信號(hào)量的等待隊(duì)列(售票員進(jìn)程)
?
? ?售票員進(jìn)程:
? ? ? ? ? ?關(guān)車(chē)門(mén);
? ? ? ? ? ?V:S1=S1+1得:S1=-1+1=0≤ 0 ?喚醒等待隊(duì)列中的一個(gè)進(jìn)程
? ? (解釋:喚醒司機(jī)進(jìn)程,使司機(jī)進(jìn)程成為就緒狀態(tài),司機(jī)可以啟動(dòng)車(chē)輛,正常行駛,……,直到到V(S2),??S2=S2+1?得:S2=0+1=1>0?,司機(jī)進(jìn)程在此時(shí)往下就沒(méi)有操作了;
在喚醒司機(jī)進(jìn)程的同時(shí),售票員可以售票,執(zhí)行售票進(jìn)程,到P(S2)。
如果之前司機(jī)進(jìn)程到V(S2),這里P(S2):S2=S2-1得:S2=1-1=0 ≥?0,接著往下執(zhí)行,到最后上下客;
如果之前司機(jī)進(jìn)程未到V(S2),售票員的進(jìn)程到P(S2),則如下進(jìn)行)
? ? ? ? ? ?售票;(同時(shí)司機(jī)可能,啟動(dòng)車(chē)輛;正常行駛;……)
? ? ? ? ? ?P:S2=S2-1得:S2=0-1=-1< 0 售票員進(jìn)程暫停執(zhí)行,放入信號(hào)量的等待隊(duì)列(運(yùn)行司機(jī)進(jìn)程)
?
? ?司機(jī)進(jìn)程:? ?
? ? ? ? ?(接著上面未完成的繼續(xù)往下執(zhí)行)
? ? ? ? ? 啟動(dòng)車(chē)輛;
? ? ? ? ? 正常行駛;
? ? ? ? ? 到站停車(chē);
? ? ? ? ? ?S2=S2+1 得:S2=-1+1=0≤ 0?喚醒等待隊(duì)列中的一個(gè)進(jìn)程(運(yùn)行售票員進(jìn)程)
?
? ?售票員進(jìn)程:
? ? ? ? 開(kāi)車(chē)門(mén);
? ? ? ? 上下客;
? ? 以上過(guò)程(可以是如下):
? ? ? ? ??
? ? ?在售票員進(jìn)程進(jìn)程到V(S1),往下售票的同時(shí)司機(jī)可以啟動(dòng)車(chē)輛、……
● 使用PV操作實(shí)現(xiàn)進(jìn)程同步時(shí)應(yīng)該注意的是:
? ? (1)分析進(jìn)程間的制約關(guān)系,確定信號(hào)量種類(lèi)。在保持進(jìn)程間有正確的同步關(guān)系情況下,哪個(gè)進(jìn)程先執(zhí)行,哪些進(jìn)程后執(zhí)行,彼此間通過(guò)什么資源(信號(hào)量)進(jìn)行協(xié)調(diào),從而明確要設(shè)置哪些信號(hào)量。
? ? (2)信號(hào)量的初值與相應(yīng)資源的數(shù)量有關(guān),也與P、V操作在程序代碼中出現(xiàn)的位置有關(guān)。
? ? (3)同一信號(hào)量的P、V操作要成對(duì)出現(xiàn),但它們分別在不同的進(jìn)程代碼中。
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖
總結(jié)
- 上一篇: Windows 全局钩子 Hook 详解
- 下一篇: 使用互斥体使程序只运行一个