操作系统 吃水果放水果问题 PV操作

使用信号量和PV操作实现父亲、母亲、儿子、女儿4人,通过一个可以容纳1个水果的盘子进行削水果吃水果的活动协同。

问题描述:

桌子上有一只盘子,每次只能向其中放入一个水果。爸爸专向盘子中放苹果,妈妈专向盘子中放 橘子,儿子专等着吃盘子中的橘子,女儿专等着吃盘子中的苹果。只有盘子空时,爸爸或妈妈才 可向盘子中放一个水果。仅当盘子中有自己需要的水果时,儿子或女儿可以从盘子中取出水果。 用PV操作实现上述过程。

问题分析:

桌子上有一只盘子,每次只能向其中放入一个水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,儿子专等着吃盘子中的橘子,女儿专等着吃盘子中的苹果。只有盘子空时,爸爸或妈妈才可向盘子中放一个水果。仅当盘子中有自己需要的水果时,儿子或女儿可以从盘子中取出水果。

同步关系(一前一后):

父亲将苹果放入盘子后,女儿才能取苹果,设苹果数为apple,初始值为0
母亲将橘子放入盘子后,儿子才能取橘子,设橘子数为orange,初始值为0
只有盘子为空时,父亲或母亲才能放入水果,设盘子中水果数为plate,初始值为0

PV操作解答:

semaphore plate=1//盘子还可以放多少个水果
semaphore orange=0//盘子中橘子的数量
semaphore apple=0;//盘子中苹果的数量
dad(){
	while(1){
		准备一个苹果;
		p(plate);//若plate=1,则可以访问盘子,进行放苹果操作,若plate=0,则盘子已经有水果,需在此等待
		向盘子放苹果
		V(apple);//唤醒女儿吃苹果
	}
}
mom(){
	while(1){
		准备一个橘子;
		P(plate);
		向盘子放橘子;
		V(orange);//唤醒儿子吃苹果
	}
}
son(){
	while(1){
		P(orange);//若orange=0,则等待母亲放入水果
		从盘子拿橘子;
		V(plate);//橘子已被拿走,盘子可放水果数量加1,唤醒父亲母亲放入水果。
		吃橘子;
	}
}
daughter(){
	while(){
		P(apple);//若apple=0,则等待父亲放入水果
		从盘子中拿苹果;
		V(plate);//苹果已经被拿走,盘子可放水果数量加1,唤醒父亲母亲放入水果。
	}
}
  • 32
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值