多生产者---多消费者问题(PV操作的简单例题)

多生产者—多消费者问题(PV操作的简单例题)

在引入生产者消费者问题前,先要介绍几个知识点
1.临界区的相关问题。临界区是指每个进程访问临界资源的那段程序。临界资源是指每次只允许一个进程的访问的资源
2.PV操作,是一种利用信号量,通过while循环来控制进程的执行,以规避进程进入死锁状态

对于多生产者多消费者问题来说,其实最根本的和单生产者单消费者问题差不多
以下面这个例子来说明
■桌子上有一个盘子,每次只能放一个水果。爸爸专门向盘子中放苹果,妈妈专门放桔子,儿子等着吃盘中的桔子,女儿等着吃苹果。用P、V操作实现他们之间的同步。

Semaphore mutex=1,apple=0,orange=0, empty=1;Begin
  Parbegin
    Father: begin
     Repeat
     准备苹果
     Wait(empty);      在确认盘中是否为空,若empty不为0,则可继续执行下面
     Wait(mutex);      在确认其他进程是否在执行,若没有,则减一,开始后续操作
     放入苹果;          生产者行为
     Signal(mutex);    释放生产者动作,允许其他进程执行
     Signal(apple);    生产者行为成功,给apple库存加一,允许后续消费apple进程执行
    Until false;
   end
**********************************************************************
    Daughter:begin
     Repeat
     Wait(apple);      判断apple是否有有库存,若apple为0,则持续等待,否则减一并执行后续功能
     Wait(mutex);      判断是否有其他进程正在执行,若有,持续等待
     拿走苹果;          消费者行为
     Signal(mutex);    释放资源,允许其他进程进入临界区
     signal(empty);    释放资源,允许生产者进程进入临界区
    Until false;
   end
**********************************************************************
  Parbegin
    Mother: begin
     Repeat
     准备橘子
     Wait(empty);    判断盘子是否为空,empty为1则执行下一步
     Wait(mutex);    判断当前是否有进程占用临界区
     放入橘子;        生产者行为
     Signal(mutex);  释放资源,允许其他进程进入临界区
     Signal(orange); 释放资源,允许消费者进程进入临界区
    Until false;
   end
**********************************************************************
    Son:begin
     Repeat
     Wait(orange);    判断orange是否有有库存,若orange为0,则持续等待,否则减一并执行后续功能
     Wait(mutex);     判断是否有其他进程正在执行,若有,持续等待
     拿走橘子;         消费者行为
     Signal(mutex);   释放资源,允许其他进程进入临界区
     signal(empty);   释放资源,允许生产者进程进入临界区
    Until false;
   end

多生产者多消费者问题和单生产者单消费者问题本质上是差不多的。
生产者与消费者公用一个信号量来限制使用临界区资源
不同的消费者与不同的生产者对各自的产品与消费对象都用一个独立的信号量来控制,避免空等和错误使用

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值