本文介绍了RLock是对Lock的明智默认设置吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
Python中的线程模块提供两种锁:普通锁和可重入锁.在我看来,如果我需要一个锁,我应该总是更喜欢RLock而不是Lock;主要是为了防止出现死锁情况.
the threading module in Python provides two kinds of locks: A common lock and a reentrant lock. It seems to me, that if I need a lock, I should always prefer the RLock over the Lock; mainly to prevent deadlock situations.
除此之外,我还看到两点,是什么时候更喜欢使用Lock而不是RLock:
Besides that, I see two points, when to prefer a Lock over a RLock:
- RLock的内部结构更加复杂,因此性能可能会更差.
- 由于某种原因,我想防止线程通过锁递归.
我的推理正确吗?你能指出其他方面吗?
Is my reasoning correct? Can you point out other aspects?
推荐答案
两点:
- 在正式发布的Python版本(2.4、2.5 ...直至3.1)中,RLock比Lock慢得多,因为Lock是在C中实现的,而RLocks是在Python中实现的(这将在3.2中更改)
- 可以从任何线程(不一定是获取()d的线程)释放锁,而锁定(RLock)必须由获取它的同一线程释放.
最重要的是,我建议仅在RLock符合您要查找的语义的情况下使用,否则默认使用Locks.
Bottom line, I'd suggest to only use an RLock if it matches the semantics you are looking for, otherwise stick to Locks by default.
这篇关于RLock是对Lock的明智默认设置吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!