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

一道操作系统课堂练习题,描述了爸爸、妈妈、儿子、女儿如何通过多线程同步正确操作盘中水果。分析了进程间的关系,设置信号量实现互斥与同步,并提供了伪代码解决方案。
摘要由CSDN通过智能技术生成

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

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

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

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

一、流程图:

在这里插入图片描述

二、信号量设置

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

三、伪代码
semaphore empty=1,mutex=1,apple=0,orange=0; 

void father(){
   
     
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simone Zeng

给作者来杯咖啡吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值