Neo*_*ang 4 python multithreading synchronization locking
Python 在线程模块中提供了4种不同的同步机制:Event / Condition / Lock(RLock)/ Semaphore。
我知道它们可用于同步线程之间共享资源/关键部分的访问。但我不太确定何时使用。
它们可以互换使用吗?还是其中一些是“较高级别”,将其他作为构建基块?如果是这样,那么哪个是基于哪个?
如果有人可以举例说明,那就太好了。
本文可能包含您需要的所有信息。这个问题确实非常广泛,但是让我尝试解释如何使用每个示例:
Event
-当您需要线程来传达某个特定状态时使用它,以便它们可以同步一起工作。我主要将其用于两个线程的启动过程,其中一个线程依赖于另一个线程。
示例:客户端有一个线程管理器,它__init__()
需要知道该管理器已实例化一些属性,然后才能继续。
Lock/RLock
-当您使用共享资源并且要确保没有其他线程正在读/写该资源时,请使用它。尽管我认为写前锁定是强制性的,但读前锁定可能是可选的。但是最好确保在读/写时没有其他线程同时修改它。RLock
具有被其所有者多次获取的能力,并且release()
必须被调用相同的时间acquire()
,以便其他尝试获取它的线程使用它。
我Condition
没用太多,坦白说从来不用Semaphore
,所以这个答案有编辑和改进的余地。