RLock比Lock更明智吗?

时间:2009-11-30 21:32:42

标签: python multithreading

Python中的线程模块提供了两种锁:公共锁和可重入锁。在我看来,如果我需要锁,我应该总是喜欢RLock而不是Lock;主要是为了防止死锁情况。

除此之外,我看到两点,何时更喜欢Lock over RLock:

  • RLock内部结构更复杂,因此可能会有更差的表现。
  • 由于某种原因,我想阻止线程通过锁重复。

我的推理是否正确?你能指出其他方面吗?

2 个答案:

答案 0 :(得分:10)

两点:

  • 在官方发布的Python版本(2.4,2.5 ......最高3.1)中,RLock比Lock慢得多,因为Locks在Python中用C和RLocks实现(这将在3.2中改变)
  • 可以从任何线程释放锁(不一定是获取()它的线程),而RLock必须由获取它的同一线程释放

最重要的是,我建议只使用RLock,如果它匹配你正在寻找的语义,否则默认情况下坚持使用。

答案 1 :(得分:3)

通常,您应该构建代码,以便永远不需要递归锁定正常操作(基本上它会强制您在他们正在保护的受保护数据结构周围紧紧使用锁)。因此,您希望捕获异常的递归锁定。