条件锁Condition

房东的猫 提交于 2020-02-15 20:44:25
"""设计场景:timo先说一句,亚索再说一句timo: timo队长正在待命yasuo: 面对疾风吧timo: timo整装待发yasuo: 哈杀gay  """我们最先想到就是使用Lock一人轮流说一句,看下效果:

 

 实际下效果发现好像不一样:

 

 那么如何控制他们按照合理的顺序去你说一句我回答一局好像聊天一样呢:

那么就需要引进条件锁:

什么是条件锁:

条件变量总是与某种锁定相关联。可以传入,也可以默认创建一个。当多个条件变量必须共享同一锁时,传递一个输入很有用。锁是条件对象的一部分:您不必单独跟踪它。

条件变量遵循上下文管理协议:使用该with语句在封闭块的持续时间内获取关联的锁。acquire()和 release()方法也调用相关的锁的相应方法。

必须使用关联的锁来调用其他方法。该 wait()方法释放该锁,然后阻塞直到另一个线程通过调用notify()或 唤醒它notify_all()唤醒后,wait() 重新获取锁并返回。也可以指定超时。

notify()方法唤醒等待条件变量的线程之一(如果有的话)。notify_all() 方法唤醒所有等待条件变量的线程。

注意:notify()notify_all()方法不会释放锁;这意味着唤醒的一个或多个线程不会wait()立即从其调用中返回,而仅在调用notify()notify_all() 最终放弃该锁的所有权的线程中返回

典型的使用条件变量的编程风格使用锁来同步对某些共享状态的访问。对状态的特定更改感兴趣的线程会wait()反复调用,直到看到所需的状态为止;而对状态调用进行修改的线程notify()notify_all()更改状态的线程可能会成为其中一个等待者所需的状态,则线程会反复调用 它们。例如,以下代码是具有无限缓冲区容量的一般生产者-消费者情况:

 

 

 

 实现应答效果:

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!