【发布时间】:2020-07-05 03:20:36
【问题描述】:
假设我有两个期货对应于两个并行执行的计算。我如何等到第一个未来准备好?理想情况下,我正在寻找类似于Python asyncio's wait 的API,参数为return_when=FIRST_COMPLETED。
但是,据我所知,当前的 C++ std::future 功能似乎不提供这样的 API。在这种情况下,我正在寻找一种有效/正确的方法来轮询未来的状态。
如果 future 不是此任务的正确工具,我愿意接受使用线程和条件变量的解决方案。
【问题讨论】:
-
std::future_status status = future->wait_for(0); ?
-
您可以使用
std::future<T>::get()函数从该未来检索执行结果。它将等待未来的有效结果。 -
只是好奇,但这似乎是一个奇怪的要求。如果有一个任务可以在例如第一个未来准备就绪时启动,那么为什么不将该任务包含在与该未来关联的线程中呢?就目前而言,这似乎有点XY。你有这方面的用例吗?
-
@G.M.澄清一下,要求是在两个任务中的任何一个完成后立即执行一项任务(而不是第一个任务/未来)。我当前的用例是在一个协议的实现中,Alice 和 Bob 向 Charlie 发送相同的数据,而 Charlie 在收到 Alice 或 Bob 的数据后立即继续计算,而无需等待他们两个都发送。我相信这是结合大多数语言提供的期货的一般方式。
标签: c++ multithreading asynchronous