[英]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.