std :: future with std :: promise

时间:2018-07-09 19:12:47

标签: c++ promise std future

我在理解诺言如何与未来合作方面存在问题。 我有一个返回std::future的函数,例如以下示例:

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

我的问题是,可以通过异步生成线程来计算此未来,或者可以已经准备好返回结果,因此我想使用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()且已实现诺言的将来访问诺言变量吗?如果是这样的话,我在这里会有一个大的斗。

在这种情况下,谁能告诉我如何退回std::future

1 个答案:

答案 0 :(得分:3)

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

不是规范性的,但例如,参见cplusplus.com中所述的promise

  

共享状态的生存期至少持续到最后一个对象为止   与之关联的对象会释放它或将其销毁。因此它   如果最初获得它的诺言对象可以生存   也与未来相关。

相关问题