天天看點

程序管理PV操作

含義:PV操作是一種實作程序互斥與同步的有效方法。PV操作與信号量的處理相關,P表示通過的意思,V表示釋放。

具體定義:

P(S):

①将信号量S的值減1,即S=S-1;

②如果S30,則該程序繼續執行;否則該程序置為等待狀态,排入等待隊列。

V(S):

①将信号量S的值加1,即S=S+1;

②如果S>0,則該程序繼續執行;否則釋放隊列中第一個等待信号量的程序。

考點:釋放、等待

真題:

程式管理PV操作

分析:

首先,有顧客和收銀員兩程序,是以這個應該有同步的關系,要協作完成工作。顧客程序的主要工作是進入超市,在進超市之前看看自己能不能進,因為超市限制顧客的人數了。然後進去了,就開始買東西,買完了,就找收銀員付錢,付完錢就可以走了。而收銀員的工作應該是有顧客付錢來了,就要收錢了,收完錢了,再看看有沒有買完東西要付錢的顧客,沒有的話可以休息,有的話就繼續收錢。

單看顧客程序,從上往下看。顧客進入的前提是要看看是不是能進去。題中信号量S1,S2,Sn初值分别為0,0,n。Sn表示超市可以放n個顧客進來,此時表示的是還有n個資源,也就是超市裡一個顧客也沒有。S1和S2都等于0是表示顧客和收銀員都隻有0個資源。

首先顧客進入,P(Sn)一下,Sn=Sn-1=n-1,n-1>0,是以可以放人。然後在超市購物,購完物要付款了,得找收銀員了。是P一下,還是V一下,是P(S1)還是P(S2),是V(S1)還是V(S2)?

由于S1和S2都是0,雖然是先P,再V。而且一般同步是P自己,V别人。但是如果P一下,變-1<0,就要開始等待了,進行不下去了。是以應該是V一下,V誰呢,V收營員。哪個信号量是收銀員? 不如假設一個,S1好了。V(S1),釋放一個收營員的資源,S1=S1+1=1>0,是以收銀員可以開始收費了。P(S2)一下,S2=S2-1=-1<0,其他顧客,就不要來付錢了,沒地。而收銀員要收費就看另一邊好了

程式管理PV操作

收銀員先怎樣怎樣,然後收費,然後怎樣怎樣。還是照一般的理,一般是先P,再V。而且一般同步是P自己,V别人。是以看看c1應該是P,P(S1)=S1-1=1-1=0,表示收銀員的資源被占用了,其他要結賬的顧客我忙着呢等等啊。c2,是收完錢,V(S2),S2=S2+1=1>0,是以顧客又可以開始來付錢了。

程式管理PV操作

最後顧客走了,釋放了他在超市裡占的那個資源,V(Sn)。 按照分析的結果,a、b1、b2、c1、c2分别是P(Sn),V(S1),P(S2),P(S1),V(S2)。然後根據選項答案是CDA

繼續閱讀