zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    c# 中textbox 换行符是什么??
    aspnetpager注意事项
    asp 自动弹出窗口
    用递归方法删除文件夹目录及文件
    二维数组的应用
    外边框的样式
    JS 不间断滚动
    单目标 JADE
    在Delphi中使用Action降低水平功能和业务功能的耦合
    关于TListView中的Data属性
  • 原文地址:https://www.cnblogs.com/aloneindefeat/p/10697758.html
Copyright © 2011-2022 走看看