簡體   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