我如何“清除”std :: promise?

时间:2016-02-03 10:02:53

标签: c++ multithreading c++11

我有一个程序,它应该循环启动8个线程,它将使用std::promise返回一个值。所以我想我需要创建一个包含8个promise个对象的向量,获取它们的future,并使用这些promise来返回值,然后使用join线程main。问题是:在下一次迭代中,我将创建另外8个线程 - 我可以重用相同的promise对象,还是需要再创建8个?我还没有找到任何方法在互联网上重复使用它们,但也许我错过了一些明显的东西?

2 个答案:

答案 0 :(得分:12)

要重复使用承诺,只需重新分配即可。

std::promise<int> my_promise;
//use the promise
my_promise = std::promise<int>(); //now you have a new promise

答案 1 :(得分:1)

std :: promise只能使用一次,所以我建议每次都创建这组promise,或者使用其他机制在线程之间进行通信(比如vector + mutex)。 您还可以考虑使用std :: async而不是创建线程。