操作系统中的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

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