zoukankan      html  css  js  c++  java
  • Python入门学习笔记14(多线程event)

    event

    event可以理解为一个标志位,运用于多线程之间的交互。
    当设置了event,wait可以通过,
    当没有设置event,wait阻塞

    一个简单的红灯停绿灯行的程序:

    import threading
    import time
    
    event = threading.Event()
    
    mutex = threading.Lock()
    
    #红绿灯
    def light():
        counter = 1
        while True:
            #不加锁的话不同线程的输出有时会打印在同一行上
            mutex.acquire()
            if counter <= 5:
                event.set()
                counter+=1
                print("绿灯")
                mutex.release()
                time.sleep(1)
            elif counter > 5 and counter <= 20:
                event.clear()
                counter+=1
                print("红灯")
                mutex.release()
                time.sleep(1)
            else:
                counter = 1
                mutex.release()
    
    def car(name):
        while True:
            mutex.acquire()
            if event.is_set():
                print("car%d通过" %name)
                mutex.release()
                time.sleep(2)
            else:
                print("car%d等绿灯" %name)
                mutex.release()
                event.wait()
    
    
    l = threading.Thread(target = light)
    l.start()
    
    for i in range(5):
        c = threading.Thread(target= car,args = (i,))
        c.start()
    

      

  • 相关阅读:
    Gradle 是什么
    Spring AOP知识
    Spring IOC常用注解
    spring 依赖注入
    Java实现基数排序
    Java实现基数排序(解决负数也可以排序)
    2020/4/10安卓开发:Spinner下拉框
    Spring ioc使用
    java实现:归并排序
    centos中docker的安装
  • 原文地址:https://www.cnblogs.com/Hexdecimal/p/9409227.html
Copyright © 2011-2022 走看看