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()

  

posted @ 2018-08-02 18:57  wu1  阅读(135)  评论(0)    收藏  举报