zoukankan      html  css  js  c++  java
  • python 线程条件变量锁

    # _*_coding:utf-8_*_
    # author:leo
    # date:
    # email:alplf123@163.com
    import queue, threading
    
    
    class Worker(threading.Thread):
    
        def __init__(self):
            threading.Thread.__init__(self)
            self.lock = threading.Lock()
            self.con1 = threading.Condition(self.lock)
            self.con2 = threading.Condition(self.lock)
            self.event = threading.Event()# 也可以达到类似的效果,但是不够灵活,运用的场景不够丰富,此类也是线程安全
            self.queque = queue.Queue()
            print(self.event.is_set())
        
        def run(self):
    
            threading.Thread(target=self.customer).start()
            threading.Thread(target=self.producter).start()
    
        def producter(self):
            with self.con1:
                for a in range(100):
                    print('productor put:', str(a))
                    self.queque.put(a)
                    self.con2.notify()
                    self.con1.wait() #使用wait 必须保证当前是安全的 必须得到锁
                    print('recevie sigal from con1 producting...')
                self.con2.notify_all()
        def customer(self):
            with self.con2:
                while True:
    
                    self.con2.wait()
                    print('recevie signal from con2 customer....')
                    if self.queque.empty():
                        break
                    result = self.queque.get()
                    if result is not None:
                        print('customer get:', str(result))
                        self.con1.notify()
    
    t = Worker()
    t.start()
    t.join()
  • 相关阅读:
    线性表(List)
    LUA ipairs遍历的问题
    C#预编译的问题
    Resources与StreamingAssets文件夹的区别
    LUA表与函数的深入理解
    LUA 删除元素的问题
    SVN版本回退
    C# MemoryStream先写后读的奇怪现象
    LUA表 pairs, ipairs输出顺序问题
    LUA table.sort的问题,数组与表的区别
  • 原文地址:https://www.cnblogs.com/alplf123/p/8542207.html
Copyright © 2011-2022 走看看