RLock比Lock更明智吗?

Ber*_*ler 13 python multithreading

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

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

  • RLock具有更复杂的内部结构,因此可能具有更差的性能.
  • 由于某种原因,我想阻止线程通过锁递归.

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

Ant*_* P. 10

两点:

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

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