我想运行相同类型的任务(工作线程),但一次只能执行一定数量的任务.当任务完成时,其结果是新任务的输入,然后可以启动该任务.
有没有什么好的方法可以在C++ 11中使用异步/未来范例来实现它?
乍一看,它看起来很直接,您只需生成多个任务:
std::future<T> result = std::async(...);
Run Code Online (Sandbox Code Playgroud)
然后,运行result.get()以获取任务的异步结果.
然而,这里的问题是未来的对象必须存储在某种队列中并且一个接一个地等待.但是,可以一遍又一遍地迭代未来的对象,检查它们是否已准备好,但由于不必要的CPU负载,这是不可取的.
有可能以某种方式等待来自给定集合的任何未来准备好并获得其结果吗?
到目前为止,我能想到的唯一选择是没有任何异步/未来的老派方法.具体来说,产生多个工作线程并在每个线程的末尾将其结果推送到受互斥锁保护的队列中,该队列通过条件变量通知等待线程,该条件变量已更新队列以获得更多结果.
有没有其他更好的解决方案与异步/未来可能?