簡體   English   中英

std::promise::set_value 崩潰

[英]Crash in std::promise::set_value crash

錯誤:在拋出 'std::future_error' what() 的實例后調用終止:std::future_error:沒有關聯的 state

g++ --version 7.5.0 但是,相同的代碼行在具有相同 g++ 版本的 QNX 上運行良好。

Also, if we spawn a new thread and move promise to that thread function as a parameter, then exception is not theown when set_value() is invoked on promise object.

我的確切問題是,如果這是預期的行為,有沒有辦法轉移 promise object 的所有權,以便其他線程可以在稍后執行期間使用它。 除了產生一個新線程,而是能夠從一個已經存在的線程訪問 promise。

#include <future>

using namespace std;

int main()
{
    promise<int> p1;
    promise<int> p2(move(p1));
    p1.set_value(99); // SIGSEGV!
}

獲得異常是這里的標准行為。 當您移動 promise 時,它會將共享的 state 移動到 promise 持有的移動到 ZA8CFDE6331BD59EB62AC96F89111 這使得從 object 移出沒有共享的 state。 如果我們查看set_value()的參考頁面,我們會看到它聲明

例外
std::future_error在以下情況下:

  • *this沒有共享的 state。 錯誤類別設置為no_state

如果您的 QNX 實現沒有拋出異常,那么它就是不合格的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM