shared_future<void> 是 condition_variable 的合法替代吗?

SSt*_*ven 6 c++ multithreading

Josuttis 指出 [“标准库”,第 2 版,第 1003 页]:

Future 允许您阻塞,直到另一个线程提供数据或另一个线程完成。然而,Future 只能将数据从一个线程传递到另一个线程一次。事实上,Future 的主要目的是处理线程的返回值或异常。

另一方面,a可以被多个shared_future<void>线程使用,以识别另一个线程何时完成其工作。

另外,一般来说,高级并发特性(例如futures)应该优先于低级并发特性(例如condition_variables)。

所以我想问一下:有没有什么情况(需要多线程同步)a是shared_future<void>不够的,acondition_variable是必须的?

jot*_*asi 6

future正如 @TC 和 @hlt 的评论中已经指出的那样, s/ s的使用shared_future大多受到限制,因为它们只能使用一次。因此,对于每项通信任务,您都必须有一个新的future. 斯科特·迈耶斯 (Scott Meyers) 很好地解释了其优缺点:

第 39 条:考虑一次性事件通信的无效 future。
Scott Meyers:有效的现代 C++(重点是我的)

他的结论是,使用promise/future对可以避免使用condidition_variables 带来的许多问题,提供一种更好的方式来传达一次性事件。付出的代价是您正在为共享状态使用动态分配的内存,更重要的是,对于您想要通信的每个事件,您都必须拥有一个promise/对。future