2017-04-21 84 views
0

我有一段代碼,我正在使用tbb::parallel_for來多線程一個循環,該循環被主線程調用。在那個循環中,我需要主線程來更新UI以反映進度。從我觀察到的,tbb::parallel_for總是使用調用者線程+ N工作線程。但是,我想知道,調用線程的使用是保證還是恰好是這種情況?tbb :: parallel_for是否總是使用調用線程

下面是示例代碼:

static thread_local bool _mainThread = false; // false in all threads 
_mainThread = true;       // now true in main thread, but false in others 
tbb::parallel_for(start, end, *this); 

void Bender::processor::operator()(size_t i) const 
{ 
... 
      if(_mainThread)      // only main thread will issue events 
       ProgressUpdatedEvent(progress); 
} 

謝謝!

回答

2

嚴格地說,我不認爲TBB中有任何給定線程應該運行的保證(TBB的基本原理是可選並行性和隨機工作竊取)。即使TBB中的任務關聯性也是「軟」的,因爲不能保證特定的工作人員可以執行關聯的任務。

實際上,如何實現parallel_for的方式意味着它將在切換到其他內容並退出parallel_for之前運行至少一個任務。因此,至少在簡單的情況下,它預計會運行得很好。