設公共汽車上,司機和售票員的活動分別是:
司機:啟動車輛–正常行駛–到站停車;
售票員:關車門–售票–開車門;
訊號量(semaphore)的資料結構為乙個值和乙個指標,指標指向等待該訊號量的下乙個程序。訊號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的數量;當它的值小於0時,其絕對值表示等待使用該資源的程序個數。注意,訊號量的值僅能由pv操作來改變。
一般來說,訊號量s>0時,s表示可用資源的數量。執行一次p操作意味著請求分配乙個單位資源,因此s的值減1;當s<0時,表示已經沒有可用資源,請求者必須等待別的程序釋放該類資源,它才能執行下去。而執行乙個v操作意味著釋放乙個單位資源,因此s的值加1;若s=0,表示有某些程序正在等待該資源,因此要喚醒乙個等待狀態的程序,使之執行下去。
定義兩個同步訊號量:
應設定兩個訊號量s1和s2。
s1表示是否允許司機啟動汽車(或表示售票員是否已經關好車門),其初值為0;
s2表示是否允許售票員開門(或表示司機是否已經到站停車了),其初值為0.
在啟動汽車和開車門前加p操作,在關車門和到站停車後加v操作。
【司機流程圖】
【售票員流程圖】
#define max 80//假設汽車的最大容量為80
int num=0;//初始還沒有啟動客車上的人數為0
int sc=0;//上車的人數
int xc=0;//下車的人數
int k;//上車-下車,停站上下車後後人數變化,即淨上車人數;
//k=sc-xc;//淨上車人數/
int dr();
int cd();
int check()
cout
check();
while(xc>num)
cout
//cout<
{cout<
詳細簡單的win中P,V操作(司機 售票員)C語言
如果還不知道建立子程序,參考 win中建立程序 正文開始 c語言windows環境下 建立訊號量 handle createsemaphore lpsecurity attributes lpsemaphoreattributes,安全屬性指標 long linitialcount,初始計數 lon...
公交車司機與售票員程序協同活動問題 PV操作
設公共汽車上,司機和售票員的活動分別是 司機的活動 啟動車輛 正常行車 到站停車 售票員的活動 關車門 售票 開車門 在汽車不斷地到站 停車 行駛過程中,這兩個活動有什麼同步關係?用訊號量和p v操作實現它們的同步。解 在汽車行駛過程中,司機活動與售票員活動之間的同步關係為 售票員關車門後,向司機發...
作業系統 PV操作
1.pv原語的含義 p操作和v操作是不可中斷的程式段,稱為原語。pv原語及訊號量的概念都是由荷蘭科學家e.w.dijkstra提出的,其基本思路是用一種新的變數型別 semaphore 來記錄當前可用資源的數量。訊號量sem是一整數,sem大於等於零時代表可供併發程序使用的資源實體數,但sem小於零...