import threading import time import os #acquire([timeout]): 尝试获得锁定。使线程进入同步阻塞状态。 #release(): 释放锁。使用前线程必须已获得锁定,否则将抛出异常。 #Lock属于全局,Rlock属于线程。 # 构造方法: Lock(),Rlock(),推荐使用Rlock() # Lock对比Rlock # import threading # # lock = threading.Lock() # Lock对象 # lock.acquire() # lock.acquire() # 产生了死锁。 # lock.release() # lock.release() # print("aaaaaa") # lock.acquire() # # import threading # # rLock = threading.RLock() # RLock对象 # rLock.acquire() # rLock.acquire() # 在同一线程内,程序不会堵塞。 # rLock.release() # rLock.release() def booth(tid): global i global lock while True: lock.acquire() #使用lock.acquire()获得线程锁。此时,其他的线程就无法再获得该锁了,直到锁被另一个线程释放:lock.release()。 if i!=0: i=i-1 print ("窗口:",tid,",剩余票数:",i) time.sleep(1) else: print ("Thread_id",tid,"No more tickets") os._exit(0) lock.release() time.sleep(1) i = 100 lock=threading.Lock() #创建线程锁 for k in range(10): new_thread = threading.Thread(target=booth,args=(k,)) #target: 要执行的方法; args/kwargs: 要传入方法的参数。 new_thread.start() #start(): 线程准备就绪,等待CPU调度,启动线程。