吸烟者问题(Smoker Problem)
问题描述 三个吸烟者在一间房间内还有一个香烟供应者为了制造并抽掉香烟每个吸烟者需要三样东西烟草纸和火柴供应者有丰富的货物提供三个吸烟者中第一个有自己的烟草第二个有自己的纸第三个有自己的火柴供应者将两样东西放在桌子上允许一个吸烟者进行对健康不利的吸烟当吸烟者完成吸烟后唤醒供应者供应者再放两样东西(随机地)在桌面上然后唤醒另一个吸烟者试为吸烟者和供应者编写程序解决问题 问题分析 k供应者seller随即产生两样东西提供它们这里用普通变量来表示 k吸烟者进程smoker根据其排号不同拥有不同的一件东西假设号吸烟者拥有烟草tobacco号吸烟者拥有纸paper号吸烟者拥有火柴match其他号码错误返回 k吸烟者的序号代表他们拥有的东西用他们的序号和供应者产生的两样东西比较如果都不相等则说明他拥有的东西和供应者产生的东西匹配它可以吸烟如果其中一个相等则推出继续排队 k mutex信号量代表一个只能进入的门每次只有一个吸烟者可以进入进行比较和吸烟 k每个吸烟者在吸烟完毕之后出门之前要叫醒供应者调用seller进程
The PV code Using Pascal
var s S S S; semaphore; S:=; S:=S:=S:=; fiagflagfiag:Boolean; fiag:=flag:=flag:=true; cobegin process 供应者 begin repeat P(S); 取两样香烟原料放桌上由flagi标记 //nagonagenage 代表烟草纸火柴 返回《操作系统之PV金典》 [] [] |