Lock , 普通锁,调用acquired, 取得锁。任何线程可以调用release释放锁。 在锁未释放前调用acquired操作被block
RLock, 区别于Lock是, 如果重复调用acquired方法是同一个线程不发生block.
Semaphore , 信号量
BoundedSemaphore ,和信号量的区别是, 如果释放后信号量,大于初始值抛出异常ValueError
Condition, 需要和Lock结合使用, 支持wait和notify 操作.
Block | Release | ||
threading.Lock | 创建普通锁 | Y | any thread |
threading.RLock | 重入锁 | lock线程可以重入 | lock thread |
Semaphore | 信号量 | <=0 block | |
BoundedSemaphore | 信号量 | 信号量大于初始值时Raise ValueError | |
Condition | 条件变量 | 支持:wait, notify, acquire, release 0. Condition总是和Lock结合使用 1. wait前需要先调用acquire, wait成功自动释放锁 2. notify 本身不会释放锁,需要程序调用release |