簡體   English   中英

std::future 可以在沒有獲取或等待的情況下導致核心轉儲嗎

[英]Can std::future cause coredump without get or wait

void func() {
    std::future<int> fut = std::async(std::launch::async, []{
        std::this_thread::sleep_for(std::chrono::seconds(10));
        return 8; 
    });
    return;
}

假設我有這樣的功能。 std::future<int>的對象fut使用std::async作業初始化,該作業將在未來返回一個整數。 但是fut會在函數func返回后立即釋放。

是否存在這樣的問題:當std::async作業返回並嘗試將8分配給對象fut時,該對象已被釋放...

如果是這樣,可能會出現關於 SIGSEGV 的核心轉儲......

我說得對嗎? 或者std::future有一些機制來避免這個問題?

使用std::async創建的期貨具有等待任務完成的阻塞析構函數。

即使您改為從std::promise創建未來,~future()的文檔也不會提及您要詢問的問題。

文檔經常使用術語“共享狀態”,暗示承諾和未來共享一個(堆分配?)狀態,該狀態保存返回值,並且在兩者都死之前不會被銷毀。

暫無
暫無

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

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