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()
  • 相关阅读:
    servlet验证账号密码
    servlet概述
    JAVA WEB开发环境与搭建
    JavaScript简介
    css样式简介
    html简介
    西柚电子邮箱登录页面
    西南石油大学计科院主页
    PHP 简单分页 献给小白
    安装FastDFS
  • 原文地址:https://www.cnblogs.com/alplf123/p/8542207.html
Copyright © 2011-2022 走看看