C++ 从C+中的多个线程获取值+;11而不等待任何给定线程完成执行

C++ 从C+中的多个线程获取值+;11而不等待任何给定线程完成执行,c++,multithreading,c++11,C++,Multithreading,C++11,我想运行一系列C++11线程(std::thread),这样每个线程都可以向创建它的进程返回一个值 我知道怎么做了 但是,根据使用std::future时,将阻止执行,直到值准备就绪。当我有多个线程时,我希望在每个线程可用时使用它们的返回值,而不是按照从未来获取值的顺序来访问它们 例如,如果我有线程t1、t2和t3,我得到它们的结果如下 t1.get(); t2.get(); t3.get(); 然后,我可能会等待t1的结果就绪,即使t2和t3已经完成了任务 有办法克服这个问题吗?你们的问题是

我想运行一系列C++11线程(
std::thread
),这样每个线程都可以向创建它的进程返回一个值

我知道怎么做了

但是,根据使用
std::future
时,将阻止执行,直到值准备就绪。当我有多个线程时,我希望在每个线程可用时使用它们的返回值,而不是按照从未来获取值的顺序来访问它们

例如,如果我有线程t1、t2和t3,我得到它们的结果如下

t1.get();
t2.get();
t3.get();
然后,我可能会等待t1的结果就绪,即使t2和t3已经完成了任务


有办法克服这个问题吗?

你们的问题是一个广义的版本,你们有多个生产者和一个消费者


您只需要使用一个由所有线程共享的队列。生产者线程将值推入队列,消费者(主线程)按数据被推入的顺序弹出数据。您必须同步对队列的访问。

@HiI'mFrogatto您能演示一下如何进行吗?可能会有帮助。你可以随时使用(例如,持续时间为零)来调查未来。我不是说这是一个好主意,只是一个可能的解决方案。:)用户2079303的答案是一个更好的解决方案。正如副本中所解释的,有一个合适的技术规范。直接链接: