为什么Python的threading.Condition默认使用RLock?

时间:2015-10-29 13:37:06

标签: python multithreading

threading.Condition将锁定作为参数,但如果未指定,则默认情况下使用threading.RLock。当我在一个线程中的条件变量上调用acquire,然后将其移交给另一个线程到wait时,我发现了这一点。这失败了RLock,因此解决方案是使用普通锁。默认情况下使用RLock背后的理由是什么?

1 个答案:

答案 0 :(得分:1)

默认情况下会使用RLock来阻止您尝试执行此操作。为了保证谓词受到保护,在相同的线程中获取锁并等待条件。使用RLock可以保证这一点。

当使用带有条件的Lock时,没有隐含的保证谓词受到保护,因为锁定线程可以并行扫描它。