August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
有时,一个thread需要等待某种外部事件,如另一个thread完成了一个任务或是已经过去了一段时间。最简单的“事件”就是时间流逝。使用<chrono>中的时间相关设施,我可以写出如下代码:
注意,我甚至没有启动任何一个thread,this_thread默认指向唯一的线程。
我使用duration_cast将时钟单位调整为我想要的纳秒。
通过外部事件实现线程间通信的基本方法是使用condition_variable,它定义在<condition_variable>中。condition_variable提供了一种机制,允许一个thread等待另一个thread。特别是,它允许一个thread等待某个条件(condition,通常称为一个事件,event)发生,这种条件通常是其他thread完成工作产生的结果。
condition_variable支持很多优雅而高效的共享方式,但也有可能相当复杂。考虑两个thread通过一个queue传递消息来通信的经典例子。简单起见,我声明queue对象以及生产者、消费者共享queue同时避免竞争条件的机制如下:
类型queue、condition_variable和mutex由标准库提供。
consumer()读取并处理Message: ...
Read now
Unlock full access