#条件:Condition、notify通知、notify_all、wait
#条件 = 递归锁 + wait功能
#条件可以让主线程控制多少个子线程可以执行。
import threading
def play(con,i):
con.acquire() #所有人都拿到了钥匙
con.wait() #排队玩游戏,等待工作人员放行,收到notify发过来的信号之后就不再阻塞。
print('游客%s可以玩游戏了'%i)
con.release()
con = threading.Condition() #条件对象
for i in range(10): #有十个游客
t = threading.Thread(target=play,args=(con,i))
t.start()
while True:
inp = input('放行人数:') #工作人员每次可以放行多少个人
if inp == 'q':break
con.acquire() #工作人员拿到钥匙
con.notify(int(inp)) #发出通知信号:通知放行多少个人,notify后面必须跟int类型。
con.release()
#notify_all:放行所有线程
# while True:
# inp = input('放行人数:')
# if inp == 'q':break
# con.acquire()
# if inp == 'all':
# con.notify_all() #放行所有人
# else:
# con.notify(int(inp))
# con.release()