码迷,mamicode.com
首页 > 其他好文 > 详细

操作系统中的PV原语

时间:2018-04-13 18:01:10      阅读:361      评论:0      收藏:0      [点我收藏+]

标签: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

操作系统中的PV原语

标签:PV原语

原文地址:http://blog.51cto.com/13682530/2103089

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!