操作系统中的PV原语

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统中的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操作

PV操作

pv操作与信号量

什么是原语

信号量机制和PV操作

进程间通信&死锁&信号量及PV原语