|
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 | 信号量 | | 信号量大于初始值时RaiseValueError | Condition | 条件变量 | 支持:wait,notify, acquire, release
0. Condition总是和Lock结合使用
1. wait前需要先调用acquire, wait成功自动释放锁
2. notify 本身不会释放锁,需要程序调用release |
|
|
|