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

除此之外,在使用Lock而不是RLock时,我看到两点:

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

  • 我的推理正确吗?您能指出其他方面吗?

    最佳答案

    两点:

  • 在正式发布的Python版本(2.4、2.5 ...直至3.1)中,RLock比Lock慢得多,因为在C中实现了锁,而在Python中实现了RLocks(这将在3.2中更改)
  • 可以从任何线程(不一定是获取()d线程)释放锁,而RLock必须由获取它的同一线程释放

  • 最重要的是,我建议仅在RLock符合您要查找的语义的情况下使用RLock,否则默认情况下请坚持使用Locks。

    关于python - RLock是对Lock的明智默认设置吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1822541/

    10-13 06:29