• python线程condition条件锁应用实例


    import time
    import threading
    # 吃火锅鱼丸
    guo = []
    suo = threading.Condition()  #条件锁
    # 生产者负责生产
    class Produce(threading.Thread):
        def __init__(self):
            super().__init__()
        def run(self):
            suo.acquire() #先锁住
            while True:
                time.sleep(1)
                guo.append("鱼丸")
                print("%s生产了一个鱼丸,现在锅里有%s个鱼丸"%(self.name,len(guo)))
                if len(guo)>=5:
                    print("锅里已经有%s个鱼丸"%len(guo))
                    suo.notify() # 通知
                    suo.wait()   # wait等待  释放另一个线程
                    
    # 消费者负责消费
    class Consumer(threading.Thread):
        def __init__(self):
            super().__init__()
        def run(self):
            suo.acquire()
            while True:
                time.sleep(1.5)
                guo.pop()
                print("%s吃了一个鱼丸,现在锅里有%s个鱼丸"%(self.name,len(guo)))
                if len(guo)<1:
                    print("锅里已经没有鱼丸了,请添加鱼丸。")
                    suo.notify() # 通知
                    suo.wait()# wait 等待   释放另一个线程
    pro = Produce()
    pro.start()
    con = Consumer()
    con.start()
    
    # 汽车订单变化
    Car = ["保时捷911","丰田普拉多","哈弗H5","奔驰G500","路虎","法拉利","宝马X5","奥迪A8","膜拜单车","大巴车"]
    suo = threading.Condition()  #条件锁
    List = []
    index = -1
    class car(threading.Thread):
        def __init__(self):
            super().__init__()
        def run(self):
            suo.acquire()
            while True:
                global index
                time.sleep(2)
                index+=1
                List.append(Car[index])
                print("恭喜靳志龙喜提一辆%s,请继续选择你喜爱的车"%Car[index])
                suo.notify()
                if len(List)>=10:
                    print("对不起,你的银行卡余额不足")
                    suo.release()
                    break
                else:
                    suo.wait()
    class carbox(threading.Thread):
        def __init__(self):
            super().__init__()
        def run(self):
            suo.acquire()
            while True:
                global index
                time.sleep(0.5)
                print("仓库里还有%s辆车"%(len(Car)-index-1))
                suo.notify()
                if len(List) >= 10:
                    print("哈哈,其实我们也没有车了,小哥哥")
                    suo.release()
                    break
                else:
                    suo.wait()
    aa = car()
    aa.start()
    bb = carbox()
    bb.start()
  • 相关阅读:
    Object C语法学习
    iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)
    系统迭代新功能及第三方技术
    码云&Github 个人代码资源快速查找
    iOS开发应用结构化资源储备
    新增扩展程序功能打包提交新版 WARNING ITMS-90473 警告问题
    NSRect 位置和尺寸
    iOS应用打包完后再在开发者网站添加应用测试ID能够加入测试吗
    苹果原生文字转语音播报
    SiriShortCut模型建立及数据交互逻辑
  • 原文地址:https://www.cnblogs.com/aloneindefeat/p/10697758.html
Copyright © 2020-2023  润新知