吸菸者問題是作業系統中p、v操作部分的經典同步問題,深刻理解吸菸者問題對我們學習作業系統有著很大的益處!(ง •_•)ง
1. 問題描述
三個吸菸者在乙個房間內,還有乙個香菸**者。為了製造並抽掉香菸,每個吸菸者需要三樣東西:菸草、紙和火柴,** 者有豐富貨物提供。三個吸菸者中,第乙個有自己的菸草,第二個有自己的紙,第三個有自己的火柴。**者隨機地將兩樣東西放在桌子上,允許乙個吸菸者進行對健康不利的吸菸。當吸菸者完成吸菸後喚醒**者,**者再把兩樣東西放在桌子上,喚醒另乙個吸菸者。試用訊號量和p、 v操作求解該問題
2. 問題分析
**者與三個抽菸者分別是同步關係。由於**者無法同時滿足兩個或兩個以上的抽菸者,三個抽菸者對抽菸這個動作是互斥的。
3. p、v操作
// 設0,1,2 分別代表菸草,紙和火柴
semaphore s0 =1;
// 互斥訊號量,表示**者是否可以在桌子上放東西
semaphore s1 =0;
// 表示第乙個吸菸者所需要的資源
semaphore s2 =0;
// 表示第二個吸菸者所需要的資源
semaphore s3 =0;
// 表示第三個吸菸者所需要的資源
int i =
0, j =0;
// 表示**者放的兩種資源
cobegin
process businessman
p(s0)
;// 如果桌子上沒有東西了,則獨佔桌子的使用權
put_items[i]_on_table;
// 放東西
put_items[j]_on_table;
// 繼續放東西if(
(i=0
&& j=1)
||(i=
1&& j=0)
)// 表示**者提供的是菸草和紙
v(s3)
;// 第三個吸菸者擁有火柴,菸草和紙是ta需要的,因此喚醒ta
elseif(
(i=1
&& j=2)
||(i=
2&& j=1)
)v(s1)
;else
v(s2)
}process consumer_k
(k=1,2
,3)}
coend
d*****( ̄▽ ̄*)b 王道考研 吸菸者問題
假設乙個系統有三個抽菸者和乙個 者程序。每個抽菸者不停地捲菸並抽掉它,但是要捲起並抽掉一支煙,抽菸者需要有三種材料 菸草 紙和膠水。三個抽菸者中,第乙個擁有菸草 第二個擁有紙 第三個擁有膠水。者程序無限地提供三種材料,者每次將兩種材料放桌子上,擁有剩下那種材料的抽菸者卷一根煙並抽掉它,並給 者程序乙...
Coding 吸菸者模型
併發程式設計經典問題之吸菸者。本文簡單介紹了問題模型,並提供了一種 python3 的解決方式。問題模型 問題拓展 問題分析 talk is cheap,show me codefrom threading import thread,condition,lock,current thread fr...
作業系統 吸菸者問題
這次介紹的幾個ipc inter process communication 程序間的通訊問題,加上上篇部落格介紹的生產者 消費者問題及其變形,都是非常經典的ipc問題,在王道老師講解的時候,彈幕一片 秒啊 666 這幾個問題的解決方案也著實讓人著迷,當我帶著懷疑去驗證時候,又有一種豁然開朗的感覺,...