import threading import time rlock = threading.RLock() # step 1: 创建重入锁 share_data = 0 def check_data(): global share_data if rlock.acquire(): if share_data > 10: share_data = 0 rlock.release() def tstart(arg): time.sleep(0.1) global share_data if rlock.acquire(): # step 2: 获取重入锁,否则阻塞当前线程 check_data() share_data += 1 rlock.release() # step 3: 释放重入锁 if __name__ == '__main__': t1 = threading.Thread(target = tstart, args = ('',)) t1.start() t1.join() print("This is main function at:%s" % time.time()) print 'share_data result:', share_data
这个例子如果使用互斥锁,就会导致当前线程阻塞。
信号量Semaphore