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