首页 > 其他 > 详细

Lock版本生产者和消费者模式

时间:2020-06-21 11:43:08      阅读:59      评论:0      收藏:0      [点我收藏+]

生产者的线程专门用来生产一些数据,存放到一个中间变量中。消费者再从这个中间的变量中取出数据进行消费。但是因为要使用中间变量,中间变量通常是一些全局变量,因此需要使用锁来保证数据完整性。

import random
import threading

gMoney = 1000
gTimes = 0
gAllTimes = 10
gLock = threading.Lock()

class Producer(threading.Thread):
    def run(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({0}生产者生产了{1}元钱,剩余{2}元钱.format(threading.current_thread(),money,gMoney))

class Consumer(threading.Thread):
    def run(self):
        global gMoney
        while True:
            money = random.randint(100,1000)
            gLock.acquire()
            if gMoney >= money:   # 当剩余钱大于随机生成的钱
                gMoney -= money
                print({0}消费了{1}元钱,剩余{2}元钱.format(threading.current_thread(), money, gMoney))
            else:
                if gTimes >= gAllTimes:
                    gLock.release()
                    break
                    print({0}消费了{1}元钱,剩余{2}元钱,钱不足!.format(threading.current_thread(),money,gMoney))

            gLock.release()


def main():
    for i in range(3):
        t2 = Consumer()
        t2.start()

    for i in range(4):
        t1 = Producer()
        t1.start()

if __name__ == __main__:
    main()

 

Lock版本生产者和消费者模式

原文:https://www.cnblogs.com/suancaipaofan/p/13171769.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!