簡體   English   中英

如何終止std :: future?

[英]How to terminate a std::future?

關於C ++ 11 std::future事情讓我感到困惑。 我想動態平衡工作負載,所以如果有一些處理器空閑,我用std::async創建一個std::future來划分剩余的數據。 它工作正常。

std::future<int> f[MAX_CHILD];
for ( each data item ){
    if ( found_idle_processor )
        f[i] = std::async( ... );

    process();
}

// At last, query the result of f.
for ( each future )
    hold = f[i].get();

但有時,一旦找到一些特殊數據項,所有其他數據將被丟棄,程序應立即給出最終結果,然后將啟動另一個任務。

std::future<int> f[MAX_CHILD];
for ( each data item ){
    if ( found_idle_processor )
        f[i] = std::async( ... );

    process();

    if ( found_special_item )
        return final_result;
}
// At last, query the result of each f.
for ( each future )
    hold = f[i].get();

但是創建的f不受我的控制,它們在返回后仍在運行嗎? 如何終止它們以釋放它們使用的CPU時間?

C ++標准沒有提供取消未來或停止線程的方法。 這是有原因的。

無法知道線程是否可以在某個特定時刻安全停止。 線程可能已經獲得了應該最終確定的資源。 只有正在運行的線程才知道何時可以安全停止。

即使底層的低級API提供了隨意殺死任何線程的調用,由於上述情況,這絕對不是一個好的方法。

這個問題的傳統解決方案是發出信號並從內部取消它。 一個簡單的實現可能基於單個原子bool標志。

暫無
暫無

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

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