二十八、Python 线程锁threading.RLock 和 threading.Lock
我们使用线程进行操作的时候,如果多个线程同时修改某个数据,可能会出现不可预料的结果,为了保证数据的正确性,引入了锁的概念。
1 import threading 2 import time 3 4 global_num = 0 5 lock = threading.RLock() 6 7 def Func(): 8 lock.acquire() #获得锁 9 global global_num 10 global_num += 1 11 time.sleep(1) 12 print(global_num) 13 lock.release() #释放锁 14 15 16 for i in range(10): 17 t = threading.Thread(target = Func) 18 t.start()
threading.RLock 和 threading.Lock 的区别
RLock 允许在同一个线程中被多次acquire。 而Lock 却不允许这个情况。 如果使用RLoc, 那么acquire 和release 必须成对出现,即调用了n次acquire,必须调用n次
release 才能这正释放所占用的锁。
1 import threading 2 lock = threading.Lock #Lock对象 3 4 lock.acquire() 5 lock.acquire() #产生了死锁 6 lock.release() 7 lock.release() 8 9 10 import threading 11 rLock = threading.RLock() # RLock 对象 12 rLock.acquire() 13 rLock.acquire() #在同一个线程内,程序不会堵塞 14 15 rLock.release() 16 rLock.release()

浙公网安备 33010602011771号