吸烟者问题——进程同步

一、问题描述:

某系统有三个吸烟者进程和一个经销商进程:

  • 每个吸烟者连续不断做烟卷并抽他做好的烟卷,做一支烟卷需要烟草、纸、火柴三种原料,这3个吸烟者分别掌握有烟草、纸和火柴;
  • 经销商源源不断地提供上述三种原料,但他只将其中的两种原料放在桌上,具有另一种原料的吸烟者就可做烟卷并抽烟,且在做完后给经销商发信号,然后经销商再拿出两种原料放在桌上,如此反复。
  • 试设计一个同步算法来描述他们的活动。

二、问题分析

吸烟者问题是经典的进程同步问题,其特点在于信号量的设置,本题的关键问题是判断有几个临界资源。烟草、纸和火柴三种原料并不能简单地看成是三种临界资源,因为它们并不是以单独的形式被三个吸烟者进程所竞争,而是以固定的组合被三个进程所申请因此可以考虑如下设置:

  • 三个信号量t1、t2和t3分别代表三种原料组合,即t1表示烟草和纸的组合信号量,t2表示烟草和火柴的组合信号量,t3表示纸和火柴的组合信号量,初值均为0。
  • 经销商一次只能提供一种组合,可以看作是放一个产品的缓冲区,资源量为一个组合,于是我们设置缓冲区的资源信号量为s,初值为1。由于该资源量为1,故可以同时作为互斥量来使用,可以省略对缓冲区操作的互斥信号量。

本题还有一个特点就是经销商在提供原料时是随机的,预先并不知道经销商会放什么原料,只有在提供以后才知道,所以在对信号量操作时必须预先搞清楚到底是放了什么原料的组合,再对相应的信号量操作。这个过程在经销商进程中有所体现。

因此简化分析:

1)三个吸烟者和一个经销商,三个吸烟者各自拥有的材料不同,可以吸烟的条件不一样,具体看经销商往桌子上放的原料

2)每个吸烟者都需要一个进程(为烟草拥有者进程、纸拥有者进程、火柴拥有者进程)分别和经销商进程进行同步

3)互斥资源:桌子;

发布了136 篇原创文章 · 获赞 54 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Flora_SM/article/details/102556202