多生产者——多消费者问题

这篇博客探讨了一个关于四人家庭如何根据偏好轮流放置和取水果的问题,通过使用信号量和互斥信号量来确保并发过程中的同步与互斥。它解释了如何利用plate、apple和orange信号量以及mutex来管理资源,确保公平分配并避免冲突。

问题背景

假设有四个人:父亲、母亲、女儿、儿子,和一个空盘子,里面最多放一个水果。
父亲每次向盘子中放一个苹果,女儿只会吃苹果。
母亲每次向盘子中放一个橘子,儿子只会吃橘子。

这个问题可以被抽象为放水果事件和拿水果事件,用信号量 plate 来表示,当 plate = 1 时,表示盘子可以放一个水果;plate = 0 表示盘子不能放水果。信号量 appleorange 表示盘子中苹果和橘子的数量。

同步与互斥关系

该问题中,有 3 对同步关系:
(1)向盘子中放入水果。需要先拿走盘子中的水果,才能放入。
(2)拿走盘子中的苹果。需要先放入苹果,才能拿走。
(3)拿走盘子中的橘子。需要先放入橘子,才能拿走。

同步:在前事件发生后进行 V 操作,后事件发生前进行 P 操作。

有 1 对互斥关系:
四个人不管是拿水果还是同一时间必须只能有 1 人进行操作。对盘子的互斥访问,用互斥信号量 mutex 实现。

互斥:在访问临界区之前进行 P 操作,访问之后进行 V 操作。

在这里插入图片描述
在这里插入图片描述

特殊的是,该问题中缓冲区大小为 1,因此可以不需要互斥信号量 mutex ;而如果缓冲区大小大于 1,就必须要互斥信号量 mutex

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值