gpt4 book ai didi

c++ - 带有临时 std::promise 的 std::future

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:48 26 4
gpt4 key购买 nike

我无法理解 promise 如何与 future 合作。我有一个返回 std::future 的函数,就像这个例子一样:

std::future<int> calcSomeValue() {
}

我的问题是这个 future 可以通过异步计算生成一个线程,或者可以有一个已经准备好返回的结果,所以我想在不运行的情况下使用 std::promise 返回它一个线程。但是……我不知道这是否安全,或者我还能做什么。参见示例:

std::future<int> calcSomeValue() {
if (resultIsReady()) {
std::promise<int> promise; // on the stack
std::future<int> rv = promise.get_future(); // is future part of the memory occupied by promise?

promise.set_value(resultThatIsReady); // does it store the value in promise or in future?
return rv; // <--- What will happen when promise is lost?
}
else {
return std::async(....)
}
}

请参阅上面代码中的注释。调用 .get() 时, future 是否会访问 promise 变量,其中 promise 已经实现?如果是,那么我将在这里大闹一场。

谁能告诉我如何在这种特殊情况下返回 std::future

最佳答案

promise 对象与共享状态相关联(注意“共享”)。当调用 promise::get_future 时,您将收到一个 future - 对象,该对象关联的共享状态与相应的 promise 对象关联的共享状态相同。这种状态至少与一个关联的生产者(即 promise )或消费者(即 future )存在的时间一样长。因此,promise 的生命周期是否在相应的future 对象之前结束并不重要。

不规范,但参见,例如,promise如 cplusplus.com 所述:

The lifetime of the shared state lasts at least until the last object with which it is associated releases it or is destroyed. Therefore it can survive the promise object that obtained it in the first place if associated also to a future.

关于c++ - 带有临时 std::promise 的 std::future,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51252572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com