(多线程同步练习)桌子上有一只盘子,每次只能放一只水果,爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子里的橘子,一个女儿专等吃盘子里的苹果。写出能使爸爸、妈妈、儿子、女儿正确同步工作的
这是操作系统的一道课堂练习题
题目完整描述:
桌子上有一只盘子,每次只能放一只水果,爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子里的橘子,一个女儿专等吃盘子里的苹果。写出能使爸爸、妈妈、儿子、女儿正确同步工作的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~
(多线程同步练习)桌子上有一只盘子,每次只能放一只水果,爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子里的橘子,一个女儿专等吃盘子里的苹果。写出能使爸爸、妈妈、儿子、女儿正确同步工作的相关推荐
- 操作系统同步问题:有一个没有限量的大盘子,爸爸只往里面放苹果,妈妈只往里面放桔子,儿子只拿苹果吃,女儿只拿桔子吃,请写出能描述4个人行为的同步方案
有一个没有限量的大盘子,爸爸只往里面放苹果,妈妈只往里面放桔子,儿子只拿苹果吃,女儿只拿桔子吃,请写出能描述4个人行为的同步方案. Program father: begin: repeat:prod ...
- 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进
桌上有一空盘,允许存放一只水果.爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果.规定当盘空时一次只能放一只水果供吃者取用,请用P.V原语实现爸爸.儿子.女儿三个并发进 ...
- 桌上有一只盘子,每次只能放入一个水果。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。
1.桌上有一只盘子,每次只能放入一个水果.爸爸专向盘中放苹果,妈妈专向盘中放桔子,一个女儿专等吃盘中的苹果,一个儿子专等吃盘中的桔子.试用P,V操作写出他们(4个并发进程)能同步的程序. semaph ...
- 【例题】给定一个浮点格式(IEEE 754),有k位指数和n位小数,对于下列数,写出阶码E、尾数M、小数f和值V的公式。另外,请描述其位表示。
前言: 上次学习汇编语言(清华大学 张悠慧)是在11月26日,内容是IEEE 754(浮点数表示).当时撇下了一道题,等度过了12月(英语六级+本科阶段的最后考试+最后的大作业)再把汇编捡起来.现在正 ...
- 桌上有一空盘,最多允许存放两只水果,爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,两个儿子专等吃盘中的桔子,两个女儿专等吃苹果。用P、V操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步。
放水果问题 桌上有一空盘,最多允许存放两只水果每次只能放入或是取出一只放一个苹果,爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,两个儿子专等吃盘中的桔子,两个女儿专等吃苹果.用P.V操作实现爸爸.妈 ...
- P、V操作与c++代码实现爸爸放苹果,妈妈放桔子,两个儿子专吃盘子中桔子,两个女儿专吃盘子中苹果问题
二.吃水果综合设计 桌子上有一只盘子,最多可容纳两个水果,每次只能放入或取出一个水果.爸爸专向盘子放苹果(apple),妈妈专向盘子中放桔子(orange):两个儿子专等吃盘子中的桔子,两个女儿专等吃 ...
- 【操作系统】编程实现如下互斥同步问题:桌上有一空盘,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。请用P、V原语(wait和signal操作)实现爸爸、儿子、女儿三
题目 编程实现如下互斥同步问题:桌上有一空盘,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果.请用P.V原语(wait和signal操作)实现爸爸.儿子.女儿三个并发 ...
- [益智]:桌子上放置硬币
考虑一个双人游戏.游戏在一个圆桌上进行.每个游戏者都有足够多的硬币.他们需要在桌子上轮流放置硬币,每次必需且只能放置一枚硬币,要求硬币完全置于桌面内(不能有一部分悬在桌子外面),并且不能与原来放过的硬 ...
- 面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌。根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组。
面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌.根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组. import java.util.LinkedList; i ...
最新文章
- 为什么单片机通常只有那么小的数据内存?
- 重构第15天 移除重复的代码(Remove Duplication)
- loj #6226. 「网络流 24 题」骑士共存问题
- 常见的保险种类,险种分类介绍
- 蓝桥杯2015初赛-牌型种数-dfs
- (35)FPGA打两拍、打三拍设计(第7天)
- Spring Boot 项目中Java对象的字符串类型属性值转换为JSON对象的布尔类型键值的解决方法及过程
- 一个鼠标控制2台电脑简单方法
- 将新项目上传到svn
- CMPP3.0-超长短信
- matlab 有约束最小化,求解带等式约束和最小化目标的LMI
- 拆解查看unity游戏资源
- MyBatis逆向工程
- Android获取视频文件时长
- Linux网络服务之常规vsFTP服务配置(超级详细图解一步骤一图)
- python多进程子进程不运行问题--未解决
- 大鱼号自媒体如何快速通过试运营转正?
- 面试题:o2o,b2c、b2b、c2c、p2p、b2b2c....这些内容是什么意思
- 【SAP PO】SAP PO 接口日志查询(Monitoring)
- 腾讯云不同账号内网联通
热门文章
- 伪装地理位置软件任我行“android版本发布
- 化工安全事故近50%出在检维修环节,人员不安全行为如何化解?
- pc端ui图片尺寸_PC端UI界面设计规范分享 共同来学习_ui设计
- Python压缩解压zip,Django下载zip文件
- 感谢C语言吧吧友奉上的C语言小程序练习---初学者练手
- 如何导出Axure原型设计中的图片?零基础入门教程
- 杰里之K歌宝 消除人声篇【针对692X】
- 分享一个好用而且免费的GIF录制软件
- 微信卖生鲜,他们是怎么做到的
- 含分布式电源的33节点配电网matlab模型图 分布式电源可自行修改输出功率以及调整接入配电网节点的位置