吸煙者問題(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金典》
[] []
From:http://tw.wingwit.com/Article/program/czxt/201311/24140.html