執行緒 FIFO佇列實現生產者消費者

2022-06-19 11:51:09 字數 1216 閱讀 8722

import threading #

匯入執行緒庫

import

time

from queue import queue #

佇列class

producer(threading.thread):

#執行緒的繼承類,修改 run 方法

defrun(self):

global

queue

count =0

while

true:

if queue.qsize() <1000:

for i in range(100):

count = count + 1msg = '

生成產品

'+str(count)

queue.put(msg)

#向佇列中新增元素

print

(msg)

time.sleep(1)

class

consumer(threading.thread):

#執行緒的繼承類,修改 run 方法

defrun(self):

global

queue

while

true:

if queue.qsize() >100:

for i in range(3):

msg = self.name + '

消費了' + queue.get() #

獲取資料

#queue.get()獲取到資料

print

(msg)

time.sleep(1)

if__name__ == '

__main__':

queue =queue()

#建立乙個佇列

for i in range(500):

queue.put(

'初始產品

'+str(i))

#在 queue 中放入元素 使用 put 函式

for i in range(2):

p =producer()

p.start()

#呼叫producer類的run方法

for i in range(5):

c =consumer()

c.start()

2020-05-07

多執行緒 生產者消費者佇列

就以alibaba的筆試題舉例吧。題目大概的意思如下 有乙個籃子,最多容納5個蘋果。有人一直往裡放蘋果。有人一直去蘋果。寫出實現。ali要求不能用concurrent包裡面的東西,所以只能用最簡單的notify和wait。如果可以用concurrent包裡面的東西,還可以用blockingqueue...

C 實現生產者消費者佇列

結果分析 原始碼位址 首先,我們的生產者與消費者佇列需要滿足同步與互斥關係,就需要一把互斥鎖,以及生產者與消費者各自的條件變數。其次,我們可以利用c 中stl裡的queue佇列來進行實現,但是我們需要對push,pop進行修改,因為stl庫的函式不一定能滿足互斥條件。也就是不一定安全。最後,所有資源...

生產者消費者執行緒

include include include includeusing namespace std typedef int semaphore 訊號量是一種特殊的整型變數 const int size of buffer 5 緩衝區長度 const unsigned short producers...