繁体   English   中英

std ::带有临时std :: promise的未来

[英]std::future with temporary std::promise

我在理解诺言如何与未来合作方面存在问题。 我有一个返回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

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

不规范的,但是见,例如, 承诺如在cplusplus.com描述:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM