10.4.3 Condition

10.4.3 Condition

Condition对象可以在某些事件触发后处理数据或执行特定的功能代码,可以用于不同线程之间的通信或通知,以实现更高级别的同步。

Condition对象除了提供与Lock类似的acquire()和release()方法外,还提供了wait()、wait_for()、notify()和notify_all()等方法。

wait(timeout=None)方法释放锁,并阻塞当前线程,直到超时或其他线程针对同一个Condition对象调用notify()、notify_all()方法,被唤醒的线程会重新尝试获取锁并在成功获取锁之后结束wait()方法,然后继续执行。

wait_for(predicate,timeout=None)方法阻塞当前线程,直到超时或条件得到满足。

notify(n=1)唤醒等待该Condition对象的一个或多个线程,该方法不负责释放锁。

notify_all()方法会唤醒等待该Condition对象的所有线程。

用Condition进行线程同步,实现窗口卖票的代码如下:

运行结果: