操作系统中的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原语的主要内容,如果未能解决你的问题,请参考以下文章