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