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调度,启动线程。