如何“清除”std::promise?

问题描述 投票:0回答:3

我有一个程序,它应该循环启动 8 个线程,这将使用

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

c++ multithreading c++11
3个回答
24
投票

要重用 Promise,只需重新分配它们即可。

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

3
投票

std::promise 只能使用一次,因此我建议每次都创建这组 Promise,或者使用其他机制在线程之间进行通信(例如向量 + 互斥体)。 您还可以考虑使用 std::async 而不是创建线程。


0
投票

这样做更简单。如果您稍后决定更改值类型,则不必触及该线。

my_promise = {};
© www.soinside.com 2019 - 2024. All rights reserved.