操作系统-生产者-消费者问题+多生产者-多消费者问题(能否改变相邻的P,V操作的顺序 死锁 问题分析与实现)

生产者-消费者问题

问题分析

存在前驱关系:缓冲区没满生产者才能生产,缓冲区没空,消费者才能消费

缓冲区需要互斥访问的原因主要有以下几点:

  • 避免数据竞争:当多个线程或进程同时访问同一个缓冲区时,如果不加以控制,就可能出现一个线程正在读取数据而另一个线程却正在写入数据的情况。这种并发的访问会导致数据的不一致性和不可预测性。
  • 防止死锁:如果生产者或消费者在没有可用缓冲区的情况下仍然保持对缓冲区的占用,可能会导致系统进入死锁状态,即多个进程互相等待对方释放资源,无法继续执行。
  • 防止内存泄露:对于动态分配在堆上的缓冲区,如果不正确地管理访问权限,可能会导致内存泄露,因为缓冲区可能永远不会被释放回系统。
  • 保护临界区:通过设置互斥信号量(如mutex),并确保在访问缓冲区的临界区内只有一个线程可以执行,可以有效地保护共享资源。

在这里插入图片描述

如何实现

在这里插入图片描述

思考:能否改变相邻的P,V操作的顺序

会出现死锁的问题
producer中生产一个产品和consumr中使用一个产品放入临界区的话会增长使用临界区的时间,上锁时间较长,不利于各个进程对临界区的交替使用(但放进去逻辑来说没问题)
在这里插入图片描述

小结

注意互斥是先P后V,同步是先V后P
在这里插入图片描述

多生产者-多消费者问题

多:指的是多类生产者与消费者的关系

问题分析

找互斥关系和同步关系(一前一后)
在这里插入图片描述

如何实现

在这里插入图片描述

如果不用互斥信号量?

在这里插入图片描述
由于apple orange plate三个同步信号量不可能存在两个或三个为1,因为盘子只能放一个水果,且只有一个盘子

在这里插入图片描述
当缓冲区为2的时候,此时可能存在两个同时访问缓冲区的进程在这里插入图片描述

小结

死锁:都卡在第一个申请互斥访问的函数上
在这里插入图片描述
即事件需要从多个进程中概括提取出来,进而简化关系
在这里插入图片描述

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

看星猩的柴狗

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值