这是操作系统的一道课堂练习题

题目完整描述:
桌子上有一只盘子,每次只能放一只水果,爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子里的橘子,一个女儿专等吃盘子里的苹果。写出能使爸爸、妈妈、儿子、女儿正确同步工作的PV过程。(先设好信号量,再写出几个过程。流程图,伪代码都可以)

(文末补充了另一种更简单的思路

这里借鉴王道书上的内容:
(1)关系分析:由每次只能向其中放入一只水果可知,爸爸和妈妈是互斥关系。爸爸和女儿、妈妈和儿子是同步关系,而且这两对进程必须连起来,儿子和女儿之间没有互斥和同步关系,因为他们是选择条件执行,不可能并发。
(2)整理思路。有4个进程,可以抽象为两个生产者和两个消费者被连接到大小为1的缓冲区上。

一、流程图:

二、信号量设置

由题可知,
盘子为互斥资源,因为可以放一个水果,所以empty初值为1;
信号量mutex控制对盘子的互斥访问,初值为1;
apple 和orange 分别表示盘中苹果和橘子的个数,初值为0

三、伪代码

semaphore empty=1,mutex=1,apple=0,orange=0; void father(){do{P(empty);    //等待盘子为空P(metux);    //等待获取对盘子的操作爸爸向盘中放一个苹果;V(mutex);   //释放对盘子的操作V(apple);   //通知女儿可以来盘子中取苹果}while(TRUE);
}void mather(){            do{P(empty);     //等待盘子为空P(metux);       //等待获取对盘子的操作妈妈向盘中放一个桔子;V(mutex);        //释放对盘子的操作V(orange);        //通知儿子可以来盘子中取橘子}while(TRUE);
}void son(){                        do{P(orange);       //判断盘子中是否有桔子P(metux);        //等待获取对盘子的操作儿子取出盘中的桔子;V(mutex);      //释放对盘子的操作V(empty);      //盘子空了,可以继续放水果了}while(TRUE);
}void daugther(){ do{P(apple);       //判断盘子中是否有苹果P(metux);        //等待获取对盘子的操作女儿取出盘中的苹果;V(mutex);      //释放对盘子的操作V(empty);      //盘子空了,可以继续放水果了}while(TRUE);
}void main() {               //四个并发进程的同步执行cobeginfather(); mather(); son(); daugther();coend
}

四、另一种思路


以上就是对于本题的解题思路了,如果你觉得我的文章对你有用请点个赞支持一下吧。如果此文章有错误或者有不同的见解欢迎评论或者私信。wink~

(多线程同步练习)桌子上有一只盘子,每次只能放一只水果,爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子里的橘子,一个女儿专等吃盘子里的苹果。写出能使爸爸、妈妈、儿子、女儿正确同步工作的相关推荐

  1. 操作系统同步问题:有一个没有限量的大盘子,爸爸只往里面放苹果,妈妈只往里面放桔子,儿子只拿苹果吃,女儿只拿桔子吃,请写出能描述4个人行为的同步方案

    有一个没有限量的大盘子,爸爸只往里面放苹果,妈妈只往里面放桔子,儿子只拿苹果吃,女儿只拿桔子吃,请写出能描述4个人行为的同步方案. Program father: begin: repeat:prod ...

  2. 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进

    桌上有一空盘,允许存放一只水果.爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果.规定当盘空时一次只能放一只水果供吃者取用,请用P.V原语实现爸爸.儿子.女儿三个并发进 ...

  3. 桌上有一只盘子,每次只能放入一个水果。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。

    1.桌上有一只盘子,每次只能放入一个水果.爸爸专向盘中放苹果,妈妈专向盘中放桔子,一个女儿专等吃盘中的苹果,一个儿子专等吃盘中的桔子.试用P,V操作写出他们(4个并发进程)能同步的程序. semaph ...

  4. 【例题】给定一个浮点格式(IEEE 754),有k位指数和n位小数,对于下列数,写出阶码E、尾数M、小数f和值V的公式。另外,请描述其位表示。

    前言: 上次学习汇编语言(清华大学 张悠慧)是在11月26日,内容是IEEE 754(浮点数表示).当时撇下了一道题,等度过了12月(英语六级+本科阶段的最后考试+最后的大作业)再把汇编捡起来.现在正 ...

  5. 桌上有一空盘,最多允许存放两只水果,爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,两个儿子专等吃盘中的桔子,两个女儿专等吃苹果。用P、V操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步。

    放水果问题 桌上有一空盘,最多允许存放两只水果每次只能放入或是取出一只放一个苹果,爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,两个儿子专等吃盘中的桔子,两个女儿专等吃苹果.用P.V操作实现爸爸.妈 ...

  6. P、V操作与c++代码实现爸爸放苹果,妈妈放桔子,两个儿子专吃盘子中桔子,两个女儿专吃盘子中苹果问题

    二.吃水果综合设计 桌子上有一只盘子,最多可容纳两个水果,每次只能放入或取出一个水果.爸爸专向盘子放苹果(apple),妈妈专向盘子中放桔子(orange):两个儿子专等吃盘子中的桔子,两个女儿专等吃 ...

  7. 【操作系统】编程实现如下互斥同步问题:桌上有一空盘,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。请用P、V原语(wait和signal操作)实现爸爸、儿子、女儿三

    题目 编程实现如下互斥同步问题:桌上有一空盘,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果.请用P.V原语(wait和signal操作)实现爸爸.儿子.女儿三个并发 ...

  8. [益智]:桌子上放置硬币

    考虑一个双人游戏.游戏在一个圆桌上进行.每个游戏者都有足够多的硬币.他们需要在桌子上轮流放置硬币,每次必需且只能放置一枚硬币,要求硬币完全置于桌面内(不能有一部分悬在桌子外面),并且不能与原来放过的硬 ...

  9. 面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌。根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组。

    面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌.根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组. import java.util.LinkedList; i ...

最新文章

  1. 为什么单片机通常只有那么小的数据内存?
  2. 重构第15天 移除重复的代码(Remove Duplication)
  3. loj #6226. 「网络流 24 题」骑士共存问题
  4. 常见的保险种类,险种分类介绍
  5. 蓝桥杯2015初赛-牌型种数-dfs
  6. (35)FPGA打两拍、打三拍设计(第7天)
  7. Spring Boot 项目中Java对象的字符串类型属性值转换为JSON对象的布尔类型键值的解决方法及过程
  8. 一个鼠标控制2台电脑简单方法
  9. 将新项目上传到svn
  10. CMPP3.0-超长短信
  11. matlab 有约束最小化,求解带等式约束和最小化目标的LMI
  12. 拆解查看unity游戏资源
  13. MyBatis逆向工程
  14. Android获取视频文件时长
  15. Linux网络服务之常规vsFTP服务配置(超级详细图解一步骤一图)
  16. python多进程子进程不运行问题--未解决
  17. 大鱼号自媒体如何快速通过试运营转正?
  18. 面试题:o2o,b2c、b2b、c2c、p2p、b2b2c....这些内容是什么意思
  19. 【SAP PO】SAP PO 接口日志查询(Monitoring)
  20. 腾讯云不同账号内网联通

热门文章

  1. 伪装地理位置软件任我行“android版本发布
  2. 化工安全事故近50%出在检维修环节,人员不安全行为如何化解?
  3. pc端ui图片尺寸_PC端UI界面设计规范分享 共同来学习_ui设计
  4. Python压缩解压zip,Django下载zip文件
  5. 感谢C语言吧吧友奉上的C语言小程序练习---初学者练手
  6. 如何导出Axure原型设计中的图片?零基础入门教程
  7. 杰里之K歌宝 消除人声篇【针对692X】
  8. 分享一个好用而且免费的GIF录制软件
  9. 微信卖生鲜,他们是怎么做到的
  10. 含分布式电源的33节点配电网matlab模型图 分布式电源可自行修改输出功率以及调整接入配电网节点的位置