2.3.7 多生产者多消费者问题

  桌子上有一只盘子,每次只能向其中放入一个水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,儿子专等着吃盘子中的橘子,女儿专等着吃盘子中的苹果。只有盘子空时,爸爸或妈妈才可向盘子中放一个水果。仅当盘子中有自己需要的水果时,儿子或女儿可以从盘子中取出水果。用PV操作实现上述过程。
  不同于一个(类)生产者一个(类)消费者问题,本题目中含有多个生产者多个消费者,但是临界资源还是1且为互斥共享。很明显这个题目的互斥关系为对盘子的访问要互斥进行;这个题目的同步关系有三个,1. 父亲将苹果放入盘子后,女儿才能取苹果 2. 母亲将橘子放入盘子后,儿子才能取橘子 3. 只有在儿子或者女儿取出了水果之后父母才能放水果。用前驱图表示同步关系如下:
semaphore mutex = 1; //实现互斥访问盘子(缓冲区)
semaphore apple = 0; //盘子中有几个苹果
semaphore orange = 0; //盘子中有几个橘子
semaphore plate = 1; //盘子中还可以放多少个水果dad (){while(1){准备一个苹果;P(plate);P(mutex);把苹果放入盘子;V(mutex);V(apple);}
}mom (){while(1){准备一个橘子;P(plate);P(mutex);把橘子放入盘子;V(mutex);V(orange);}
}daughter (){while(1){P(apple);P(mutex);从盘中取出苹果;V(mutex);V(plate);吃掉苹果;}
}son (){while(1){P(orange);P(mutex);从盘中取出橘子;V(mutex);V(plate);吃掉橘子;}
}

可能有的同学会问为什么设置了一个mutex=1还要再有一个plate=1呢?mutex完成的任务是保证互斥,其值并无实际意义;plate代表的是缓冲区的大小,可以随着题目条件而改变。顺便一提,其实在本题中mutex可以不要,因为在任何时候apple、orange、plate 三个同步信号量中最多只有一个是1。因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区。但是再平常的时候我们还是写上互斥信号量比较好。

操作系统(二十四)多生产者多消费者问题相关推荐

  1. 异常处理程序和软件异常——Windows核心编程学习手札之二十四

    异常处理程序和软件异常 --Windows核心编程学习手札之二十四 CPU负责捕捉无效内存访问和用0除一个数值这种错误,并相应引发一个异常作为对错误的反应,CPU引发的异常称为硬件异常(hardwar ...

  2. [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  3. 真三国无双8二十四项修改器风灵月影版

    点击下载来源:真三国无双8二十四项修改器风灵月影版 真三国无双8修改器风灵月影顾名思义,就是由风灵月影大神专门为<真三国无双8(Dynasty Warriors 8)>量身打造的一款游戏辅 ...

  4. 计算机网络(二十四)UDP及TCP首部的格式

    计算机网络(二十四)UDP及TCP首部的格式 UDP首部的格式 a.源端口号(Source Port) b.目标端口号(Destination Port) c.包长度(Length) d.校验和(Ch ...

  5. J2EE进阶(二十四)JBoss Web和 Tomcat的区别

    J2EE进阶(二十四)JBoss Web和 Tomcat的区别 在Web2.0的浪潮中,各种页面技术和框架不断涌现,为服务器端的基础架构提出了更高的稳定性和可扩展性的要求.近年来,作为开源中间件的全球 ...

  6. 二十四、Struts2中的UI标签

    二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...

  7. python 分数序列求和公式_Python分数序列求和,编程练习题实例二十四

    本文是关于Python分数序列求和的应用练习,适合菜鸟练习使用,python大牛绕行哦. Python练习题问题如下: 问题简述:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 要 ...

  8. 数字图像处理领域的二十四个典型算法及vc实现、第一章

    数字图像处理领域的二十四个典型算法及vc实现.第一章 作者:July   二零一一年二月二十六日. 参考:百度百科.维基百科.vc数字图像处理. --------------------------- ...

  9. 山海演武传·黄道·第一卷 雏龙惊蛰 第二十二 ~ 二十四章 真龙之剑·星墟列将...

    山海演武传·黄道·第一卷 雏龙惊蛰 第二十二 ~ 二十四章 真龙之剑·星墟列将 "我是第一次--请你,请你温柔一点--"少女一边娇喘着,一边将稚嫩的红唇紧贴在男子耳边,樱桃小嘴盈溢 ...

  10. CYQ.Data 轻量数据层之路 使用篇-MAction 取值赋值 视频[带音乐] F (二十四)

    CYQ.Data 轻量数据层之路 使用篇-MAction 取值赋值 视频[带音乐] F (二十四) 说明: 本次录制主要为使用篇:CYQ.Data 轻量数据层之路 使用篇三曲 MAction 取值赋值 ...

最新文章

  1. 转---SQL与EXCEL交互(导出/导入)
  2. VisualStudio2010 SP1 SP1 SDK SQLServer 2008 SP3 下载地址
  3. hbase-client1.2.0新版api获取数据方式
  4. 那些用起来很爽,但用不好可能会被人打的Python骚操作
  5. js new Date()
  6. NOIP2016-D2-T2 蚯蚓(单调队列)
  7. c11 语言,语言学C11-1.ppt
  8. DNS 服务器 4013警告信息的解决
  9. 孔夫子旧书网接口:实现输入ISBN获取图书信息
  10. 白苹果了怎么办_iOS更新白苹果处理及第三方售后吐槽
  11. BLE(12)—— 细说 Connection
  12. 第一章 VSTO简介
  13. 模式识别——第3章 判别函数法
  14. ERP电商管理系统开发实现功能
  15. Keep不甘做“工具人”
  16. 集团公司预算控制与网上费用报销系统
  17. 【JavaScript】获取指定字符串
  18. 编程萌新必看!初学C语言必会的知识点,你学废了吗?
  19. 如何解决学习进度缓慢?
  20. Toy3D引擎:网页游戏3D化的利器

热门文章

  1. dell raid配置
  2. UML大战需求分析--阅读笔记02
  3. 用gnuplot画出c产生数据的波形图
  4. [云炬创业基础笔记]第二章创业者测试11
  5. 科大星云诗社动态20210520
  6. 科大星云诗社动态20210810
  7. android 小球效果,Android开发实现跟随手指的小球效果示例
  8. java中获取文件总行数_关于java:如何以有效的方式获取文件中的行数?
  9. 骁龙845_骁龙845为什么这么快就不受欢迎了?手机更新节奏有多快
  10. redis常用命令getex_Redis常用命令(key、string、List)