0
我正面臨着一個問題,其中有兩個任務正在運行,一個是父任務,一個是子任務,而子任務正在運行一個無限循環,並且滿足一些條件,我想手動終止子執行。我如何在TBB中做到這一點如何終止和停止TBB中的任務?
我正面臨着一個問題,其中有兩個任務正在運行,一個是父任務,一個是子任務,而子任務正在運行一個無限循環,並且滿足一些條件,我想手動終止子執行。我如何在TBB中做到這一點如何終止和停止TBB中的任務?
你想突然殺掉任務,還是隻是讓它離開環路很好,sop任務可以自行結束?
對於第一種情況,你可以很可能使用destroy方法
第二種情況可能是更好的方式來組織你的代碼。比方說,你的循環有一個像
while(!finished) {
...
}
您可以更改此對finished
變量使用的鎖,這樣你也可以從任務之外訪問它,當你希望任務改變其值的條件結束。您只需使用以下函數來讀取和寫入值,而不是直接訪問變量,無論是在任務外部還是內部。
tbb::mutex lock;
bool finished;
void finish() {
lock.lock();
finished = true;
lock.unlock();
}
bool is_finished() {
lock.lock();
bool ret = finished;
lock.unlock();
return ret;
}
所以循環條件現在是while(! is_finished())
而某處在主線程你只需要調用task.finish()
當你希望它結束
它的工作原理。謝謝 – Amit 2013-03-22 12:11:53
小改進:宣佈「完成」爲「tbb :: atomic已完成;」然後互斥體將不再需要。 –
2013-03-25 14:35:47