ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

操作系统 | PV操作 经典问题 和尚打水 吸烟者 吃水果

2021-12-30 13:59:57  阅读:402  来源: 互联网

标签:吸烟者 PV 组合 吃水果 供应者 抽烟 信号量 胶水 盘子


和尚打水问题(多生产者多消费者):

问题描述:某寺庙,有小和尚和老和尚若干,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水。水桶总数为n个。每次入水、取水仅为一桶,且不可同时进行。

信号量设置:

  1. 1.对于水缸——以一个水桶水为单位,empty=10、full = 0两个计数信号量
  2. 小和尚对缸操作:mutex-jar = 1二元信号量;
  3. 水桶个数(资源数):bucket = n计数信号量
  4. 取水操作(每次入水、取水仅为一桶):互斥mutex-well = 1二元信号量;

伪代码:

吃水果问题(多生产者多消费者):

问题描述:桌上有一只盘子,最多可容纳一个水果,每次只能放人/取出一个水果。父亲专向盘子中放苹果(apple),母亲专向盘子中放橘子(orange),儿子专等吃盘子中的橘子,女儿专等吃盘子里的苹果。试设计信号量并使用P、V操作同步父,母、子、女进程。

吸烟者问题-单生产者多消费者问题

问题描述:假设一个系统有三个抽烟者进程和一个供应者进程。每个抽烟者不停地卷烟并抽掉它,但是要卷起并抽掉一支烟,抽烟者需要有三种材料:烟草、纸和胶水。三个抽烟者中,第一个拥有烟草、第二个拥有纸、第三个拥有胶水。供应者进程无限地供三种材料,供应者每次将两种材料放桌子上,拥有剩下那种材料的抽烟者卷一根烟并抽掉它,并给供应者进程一个信号告诉完成了,供应者就会放另外两种材料再桌上,这个过程一直重复(让三个抽烟者轮流地抽烟)。

可生产多种产品的单生产者以及多消费者问题。

生产者可生产的产品一共有三种:

组合一:纸+胶水;组合二:烟草+胶水;组合三:烟草+纸。

互斥关系:桌子可以看作是一个容量为1的缓冲区,其访问是互斥的;

同步关系:桌上有组合一之后第一个抽烟者取走组合一;

桌上有组合二之后第二个抽烟者取走组合二;

桌上有组合三之后第三个抽烟者取走组合三;

取走东西使用完成后供应者将下一个组合放到桌子上。

伪代码:

标签:吸烟者,PV,组合,吃水果,供应者,抽烟,信号量,胶水,盘子
来源: https://blog.csdn.net/weixin_47187147/article/details/122235160

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有