tbb :: parallel_for是否始终使用调用线程

时间:2017-04-21 20:21:59

标签: multithreading c++11 tbb parallel-for

我有一段代码,我使用tbb::parallel_for多线程循环,由主线程调用。在该循环中,我需要主线程来更新UI以反映进度。根据我的观察,tbb::parallel_for总是使用调用者线程+ N个工作线程。但是,我想知道,调用线程的使用是否得到保证,或者恰好恰好是这种情况?

以下是示例代码:

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);
}

谢谢!

1 个答案:

答案 0 :(得分:2)

严格地说,我不认为TBB对任何给定线程应该运行的内容有任何保证(TBB的基本原则是可选并行和随机工作窃取)。甚至TBB中的任务亲和力也是“软”的,因为不能保证特定的工作人员能够完成关联任务。

实际上,parallel_for的实现方式意味着在切换到其他东西并退出parallel_for之前,它将运行至少一个任务。因此,至少对于简单的情况,预计它将运作良好。