java pv原语_操作系统中的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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值