多生产者多消费者问题

本文深入探讨了多生产者多消费者问题,分析了在缓冲区大小为1的情况下,如何利用信号量实现互斥与同步。即使没有互斥信号量mutex,由于缓冲区限制,进程访问仍能保持有序。然而,当缓冲区增大到2时,mutex变得至关重要,以防止生产者进程间的竞争条件。总结强调了从全局角度理解并发问题的重要性。
摘要由CSDN通过智能技术生成

15、多生产者多消费者问题

15.1、描述

在这里插入图片描述

15.2、分析

在这里插入图片描述
那么,经过分析,有1个互斥信号量,3个同步信号量。
在这里插入图片描述

15.3、实现

  • 有mutex
    在这里插入图片描述
    儿子进程和女儿进程开始需要对各自喜欢的水果进行一个P操作,每次只要从盘子中取出对应的水果,那么此时就要对盘子进行一个V操作。
    同时各个进程访问盘子的时候要进行一个互斥的操作。

  • 没有mutex
    在这里插入图片描述

  • 为什么有mutex和没有mutex都一样呢?
    因为本题中的缓冲区大小为1,在任何时刻,apple、 orange、 plate 三个同步信号量中最多只有一个是1。因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区…。

  • 当有两个盘子的时候:
    在这里插入图片描述
    此时出现了父亲进程和母亲进程同时访问临界资源的情况,两个生产者进程同时对缓冲区进行访问,会导致数据覆盖的问题。所以此时就必须设置mutex来保证各个进程是互斥的访问缓冲区。

15.4、总结

在这里插入图片描述

  • 要从事件的角度进行考虑,而不是对单个线程进行分析
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值