操作系統中的PV原語

一:桌上有1空盤,允許存放1個水果。爸爸向盤中放蘋果,也可以向盤中放桔子。兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規定當盤空時一次只能放1個水果供吃者取用。請用Wait()、Signal()原語實現爸爸、兒子、女兒三個併發進程的同步。
Semaphore mutex=1,mutex1=0,mutex2=0;
main(){
cobeign
father();
son();
daugther();
coend
}
father(){
while(1){
wait(mutex);
將水果放在盤子
if(放的是橘子) signal(mutex1);
else signal(mutex2);

 }

}

son(){
while(1)
{
wait(mutex1);
吃橘子
signal(mutex);
}
}
daugther(){
while(1)
{
wait(mutex2);
吃蘋果
signal(mutex);
}
}

二:在一輛公共汽車上,司機和售票員各行其職,司機負責開車和到站停車;售票員負責售票和開、關門,當售票員關好車門後,司機才能繼續開車行駛。試用P、V操作實現司機與售票員之間的同步。
semaphore door1=door2=1;
semaphore S1=S2=0;
main(){
cobegin
driver();
busserver1();
busserver2();
coend
}
driver(){
P(door1);
P(door2);
啓動車輛
正常行車
到站停車
V(S1);
V(S2);

}

busserver1()
{
P(S1);
開前門
關前門
V(Door1);
售票
}
busserver2()
{
P(S2);
開後門
關後門
V(Door2);
售票
}

三:某銀行提供1個服務窗口和10個供顧客等待的座位。顧客到達銀行時,若有空座位,則到取號機上領取一個號,等待叫號。取號機每次僅允許一位顧客使用,當營業員空閒時,通過叫號選取一位顧客,併爲其服務。顧客和營業員的活動過程描述如下:
semaphore emptyseats=10
semaphore fullseats=0
semaphore mutex=1
cobegin

{

process  顧客i
    {
       wait(emptyseats);  //獲取一個座位
         wait(mutex);  //佔用取號機取號
         從取號機取號
         wait(mutex);
         signal(fullseats);   //座位上增加一個顧客
         等待叫號,獲得服務
         signal(emptyseats);
    }

}

process  營業員

{

while(TRUE)

{
    wait(fullseats);

   叫號

   爲顧客服務;

}

}

}coend

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章