Lock版本生產者和消費者模式

2022-08-22 05:06:11 字數 1557 閱讀 3186

生產者的執行緒專門用來生產一些資料,存放到乙個中間變數中。消費者再從這個中間的變數中取出資料進行消費。但是因為要使用中間變數,中間變數通常是一些全域性變數,因此需要使用鎖來保證資料完整性。

import

random

import

threading

gmoney = 1000gtimes =0

galltimes = 10glock =threading.lock()

class

producer(threading.thread):

defrun(self):

global

gmoney

global

gtimes

while

true:

money = random.randint(100,1000) #

隨機生成100-1000的數字

glock.acquire()

if gtimes >= galltimes: #

限制生產者只能生產10次

glock.release() #

滿足條件,釋放鎖

break

gmoney +=money

gtimes += 1 #

生產次數+1

glock.release()

print('

生產者生產了元錢,剩餘元錢

'.format(threading.current_thread(),money,gmoney))

class

consumer(threading.thread):

defrun(self):

global

gmoney

while

true:

money = random.randint(100,1000)

glock.acquire()

if gmoney >= money: #

當剩餘錢大於隨機生成的錢

gmoney -=money

print('

消費了元錢,剩餘元錢

'.format(threading.current_thread(), money, gmoney))

else

:

if gtimes >=galltimes:

glock.release()

break

print('

消費了元錢,剩餘元錢,錢不足!

'.format(threading.current_thread(),money,gmoney))

glock.release()

defmain():

for i in range(3):

t2 =consumer()

t2.start()

for i in range(4):

t1 =producer()

t1.start()

if__name__ == '

__main__':

main()

生產者消費者問題 lock

public class public static void main string args class producer public void produce final intval start class consumer public void consume final intval...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

生產者和消費者模式

一 建立個生產者類 package consumerandproducer author tanhw119214 version jdk1.8.0 171 date on 2018 8 2 16 57 public class producer implements runnable public ...