Coding 吸菸者模型

2021-10-02 12:49:16 字數 2001 閱讀 2247

併發程式設計經典問題之吸菸者。本文簡單介紹了問題模型,並提供了一種 python3 的解決方式。

問題模型

問題拓展

問題分析

talk is cheap, show me code

from threading import thread,condition,lock,current_thread

from random import randint

from copy import deepcopy

from time import sleep

# 定義捲菸材料

res_glu = 0 # 膠水

res_***** = 1 # 紙張

res_tobac = 2 # 菸葉

res_all = [res_glu, res_*****, res_tobac]

conv =

# 供貨者

def supplier(res_con, res_desk):

print("supplier started", flush=true)

res_con.acquire()

while true:

res = deepcopy(res_all)

loss = randint(0,2)

res.remove(loss) # 隨機得到兩種材料

print("supplier data ready except: " + conv[loss], flush=true)

res_con.notify_all()

res_con.wait()

# 捲菸、抽菸

def make_cigar(src):

sleep(1)

# 吸菸者

waked_count = 0

def nicotian(res_con, res_desk, res):

global waked_count

th = current_thread()

print("nicotian[" + th.name + "] with " + conv[res] + " started", flush=true)

res_con.acquire()

while true:

res_con.wait()

waked_count += 1

if res_desk and (res not in res_desk[0]):

make_cigar(res_desk.pop())

print("nicotian with " + conv[res] + " has smoked\n", flush=true)

if waked_count == 3:

if res_desk:

print("error: 材料沒有被使用", flush=true)

exit()

waked_count = 0

res_con.notify()

def main():

# 材料桌,初始為空,**者放入材料,吸菸者取出材料

res_desk =

# 材料狀態控制

res_con = condition(lock())

# 吸菸者

res_list = res_all # 給吸菸者分配材料

thread_nic =

for res in res_list:

thread_nic[-1].start()

sleep(1)

# **者

thread_supp = thread(target=supplier, args=(res_con, res_desk), daemon=true)

thread_supp.start()

input("\n\n===enter any key to exit===\n\n")

if __name__ == '__main__':

main()

參考文件

吸菸者問題

吸菸者問題是作業系統中p v操作部分的經典同步問題,深刻理解吸菸者問題對我們學習作業系統有著很大的益處!1.問題描述 三個吸菸者在乙個房間內,還有乙個香菸 者。為了製造並抽掉香菸,每個吸菸者需要三樣東西 菸草 紙和火柴,者有豐富貨物提供。三個吸菸者中,第乙個有自己的菸草,第二個有自己的紙,第三個有自...

王道考研 吸菸者問題

假設乙個系統有三個抽菸者和乙個 者程序。每個抽菸者不停地捲菸並抽掉它,但是要捲起並抽掉一支煙,抽菸者需要有三種材料 菸草 紙和膠水。三個抽菸者中,第乙個擁有菸草 第二個擁有紙 第三個擁有膠水。者程序無限地提供三種材料,者每次將兩種材料放桌子上,擁有剩下那種材料的抽菸者卷一根煙並抽掉它,並給 者程序乙...

作業系統 吸菸者問題

這次介紹的幾個ipc inter process communication 程序間的通訊問題,加上上篇部落格介紹的生產者 消費者問題及其變形,都是非常經典的ipc問題,在王道老師講解的時候,彈幕一片 秒啊 666 這幾個問題的解決方案也著實讓人著迷,當我帶著懷疑去驗證時候,又有一種豁然開朗的感覺,...