桌上有一空盘,最多允许存放一只水果

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

桌上有一空盘,最多允许存放一只水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专
问题描述:桌上有一空盘,最多允许存放一个水果。

爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。

试用P、V操作实现爸爸、儿子、女儿三个并发进程的同步。

问题分析及思路:
1.这个话题就是生产者和消费者的扭曲,不是一个信号量
就能解决的。

在这个问题中,父亲、儿子和女儿共用一
个盘子,一次只能往盘子里放一个水果。

当盘子空了,
父亲可以在盘子里放一个水果。

如果苹果放在采摘盘
里,允许女儿吃,儿子要等。

如果橘子放在盘子里,儿
子被允许吃,女儿必须等。

2.那么盘子就是一个缓冲(单缓冲),同一时间只能有一个
人放和拿。

所以这个盘子是互斥的。

但是当盘子里有苹
果,父亲不放的时候,儿子可以拿,女儿也一样。

所以
应该有两个资源信号量:1个苹果和2个橙子
3.根据题意分析,三个信号量的初始值应该是1 0 0,因
为桌子上只能放一个水果。

开始的时候桌子是空的(所以可以放),所以苹果和橘子的初始资源是空的。

PV操作如下:
int put=1,apple=0,orange=0;//定义同步信号量
Father://父亲进程
While(1){P(put);
放一个苹果或者橘
子;if(fruit==apple)V(apple);elseV(orange);}
Daughter://女儿进程
While(1){P(apple);
拿一个苹果;V(put);
吃苹果;}
Son://儿子进程
While(1){P(orange);
拿一个桔子;V(put);
吃桔子;}。

相关文档
最新文档