多工實現方式 四 生產者與消費者模型

2021-10-02 19:23:11 字數 1938 閱讀 9013

一種重要的模型,基於等待/通知機制。生產者/消費者模型描述的是有一塊緩衝區作為倉庫,生產者可將產品放入倉庫,消費者可以從倉庫中取出產品。生產者/消費者模型關注的是以下幾個點:

1、生產者與消費者不能同時進行工作,形成的是互斥關係;

2、生產者與生產者之間不能同時生產,處於互斥關係;

3、消費者與消費者之間不能同時工作,處於互斥關係;

4、當緩衝區之內的資源滿時,生產者不能生產;

5、當緩衝區之內的資源空時,消費者不能消費;

6、消費者消費的速度不能超過生產者;

原**:

from queue import queue

from threading import thread

import time

#建立佇列

q = queue(10)

defproducer

(name)

:"""生產者"""

count =

1#給生產的包子計數

while

true

: q.join(

)#等待task_done()傳送訊號

q.put(count)

print

("%s正在生產第%d個包子"

%(name,count)

) count+=

1 time.sleep(2)

defcustomer

(name)

: count =

1while

true

: bao_zi = q.get(

)print

("消費者%s正在吃第%d個包子"

%(name,bao_zi)

) count+=

1 q.task_done(

)#取完後傳送訊號

time.sleep(1)

if __name__ ==

'__main__'

: t1 = thread(target=producer,args=

("劉大廚",)

) t2=thread(target=customer,args=

("翠花",)

) t1.start(

) t2.start(

)

執行結果:

劉大廚正在生產第1個包子

消費者翠花正在吃第1個包子

劉大廚正在生產第2個包子

消費者翠花正在吃第2個包子

劉大廚正在生產第3個包子

消費者翠花正在吃第3個包子

劉大廚正在生產第4個包子

消費者翠花正在吃第4個包子

劉大廚正在生產第5個包子

消費者翠花正在吃第5個包子

消費者翠花正在吃第6個包子

劉大廚正在生產第6個包子

劉大廚正在生產第7個包子

消費者翠花正在吃第7個包子

劉大廚正在生產第8個包子

消費者翠花正在吃第8個包子

劉大廚正在生產第9個包子

消費者翠花正在吃第9個包子

劉大廚正在生產第10個包子

消費者翠花正在吃第10個包子

消費者翠花正在吃第11個包子

劉大廚正在生產第11個包子

劉大廚正在生產第12個包子

消費者翠花正在吃第12個包子

劉大廚正在生產第13個包子

消費者翠花正在吃第13個包子

劉大廚正在生產第14個包子

消費者翠花正在吃第14個包子

消費者翠花正在吃第15個包子

劉大廚正在生產第15個包子

劉大廚正在生產第16個包子

消費者翠花正在吃第16個包子

5 12 生產者和消費者

一 生產者和消費者之間的關係 1 生產者將生產出來的資訊不斷存入乙個區域內,消費者將資訊從該區域內不斷讀取出來 生產者錄入資訊 消費者讀取資訊 例 電影票 public class movie public void setname string name public string getinfo...

6 1 生產者 消費者問題

在多執行緒程式中,執行緒之間通常存在分工。在一種常見模式中,一些執行緒是生產者,一些是消費者。需要強制執行幾個同步約束才能使此系統正常工作 在緩衝區中新增或刪除專案時,緩衝區處於不一致狀態。因此,執行緒必須具有對緩衝區的獨佔訪問許可權。如果消費者執行緒在緩衝區為空時到達,則會阻塞,直到生產者新增新專...

26 生產者消費者模型

一 ipc 空間復用 中記憶體隔離開了多個程序直接不能直接互動 ipc指的就是程序間通訊 幾種方式 1 建立乙個共享檔案 缺點 效率較低 優點 理論上交換的資料量可以非常大 適用於 互動不頻繁,且資料量較大的情況 2 共享記憶體 缺點 資料量不大 優點 效率高 適用於 互動頻繁,但是資料量小 3 管...