python多线程中Lock()与RLock()锁

在threading模块中,定义两种类型的琐:threading.Lock和threading.RLock。它们之间有一点细微的区别,通过比较下面两段代码来说明:

import threading  

lock = threading.Lock() #Lock对象  

lock.acquire()  

lock.acquire()  #产生了死琐。  

lock.release()  

lock.release()  

-----------------------------------------------------------------------------

import threading  

rLock = threading.RLock()  #RLock对象  

rLock.acquire()  

rLock.acquire() #在同一线程内,程序不会堵塞。  

rLock.release()  

rLock.release()  

-----------------------------------------------------------------------------

这两种琐的主要区别是:RLock允许在同一线程中被多次acquire。而Lock却不允许这种情况。注意:如果使用RLock,那么acquire和release必须成对出现,即调用了n次acquire,必须调用n次的release才能真正释放所占用的琐。

-----------------------------------------------------------------------------

锁的好处:

确保了某段关键代码只能由⼀个线程从头到尾完整地执⾏

锁的坏处:

阻⽌了多线程并发执⾏,包含锁的某段代码实际上只能以单线程模式执⾏,效率就⼤⼤地下降了。由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对⽅持有的锁时,可能会造成死锁。

你可能感兴趣的:(python多线程中Lock()与RLock()锁)