比如说,有一个主线程部署 TBB 以生成额外的工作线程,如下面的代码片段所示。
主线程继续其业务,无需等待 arena 组完成。但是,主线程可能恰好在工作线程之前完成。
所以合乎逻辑的问题是:是否有可能实现主线程到 arena 组的后期加入并使用它的时钟来帮助完成剩余的工作?任何等效的基于 TBB 的解决方案来实现这种情况?
tbb::task_group group;
tbb::task_arena arena(nthreads, 1);
tbb::task_scheduler_init init(nthreads);
arena.enqueue( [&]
{
group.run( [&]
{
...
});
});
// Work done on master thread here
// Master thread has finished: can it now join the arena group
// and help with the remaining work?
group.wait();