吸菸者問題

2021-09-03 01:27:36 字數 1218 閱讀 3289

吸菸者問題是作業系統中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 這幾個問題的解決方案也著實讓人著迷,當我帶著懷疑去驗證時候,又有一種豁然開朗的感覺,...