2013-03-22 37 views
0

我正面臨着一個問題,其中有兩個任務正在運行,一個是父任務,一個是子任務,而子任務正在運行一個無限循環,並且滿足一些條件,我想手動終止子執行。我如何在TBB中做到這一點如何終止和停止TBB中的任務?

回答

1

你想突然殺掉任務,還是隻是讓它離開環路很好,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()當你希望它結束​​

+0

它的工作原理。謝謝 – Amit 2013-03-22 12:11:53

+3

小改進:宣佈「完成」爲「tbb :: atomic 已完成;」然後互斥體將不再需要。 – 2013-03-25 14:35:47