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

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

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

信号量设置:

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

伪代码:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

伪代码:

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

上一篇:Angular 如何根据一个 class 的定义和数据,动态创建一个该类的实例


下一篇:水泥厂原料称重电石厂用料和成品采集PV厂原理和成品采集