tbb :: parallel_ for始终使用调用线程

Does tbb::parallel_for always utilize the calling thread

本文关键字:线程 调用 parallel for tbb      更新时间:2023-10-16

我有一个代码,其中我使用 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);
}

谢谢!

严格来说,我认为TBB没有任何给定线程应运行的东西的保证(TBB的基本原理是可选的并行性和随机的工作偷窃(。TBB中的任务亲和力甚至是"软",因为不能保证特定的工人可以执行封闭式任务。

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