You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于while循环内调用tbb::parallel_for的执行顺序确认

关于tbb::parallel_for在循环中的执行顺序确认

你的理解完全正确。不管是while循环还是你示例里的for循环,这类串行循环的每一次迭代都会阻塞等待当前迭代内的tbb::parallel_for完全执行完毕后,才会进入下一次迭代。

原因很明确:tbb::parallel_for是一个同步调用——它会启动线程并行处理任务,但调用这个函数的主线程会一直等待,直到所有并行任务执行完成、所有工作线程退出后,才会继续执行后续代码。

对应你给出的伪代码(修正了语法细节):

map<int, vector<object*>> objmap;
for(auto& objvec : objmap)
{
    tbb::parallel_for(
        tbb::blocked_range<vector<object*>::iterator>(objvec.begin(), objvec.end(), grainsize),
        someObject,
        tbb::simple_partitioner()
    );
}

在这个for循环里:

  • 第一次迭代启动的parallel_for会并行处理第一个objvec的所有元素,主线程会卡在这个parallel_for调用处,直到所有并行任务结束
  • 只有等第一次的parallel_for完全执行完,主线程才会进入第二次迭代,启动下一个parallel_for处理第二个objvec

这种特性刚好能满足你“第二次迭代依赖第一次迭代结果”的需求,完全不需要额外添加同步措施,TBB的parallel_for本身的同步特性就保证了循环迭代的串行顺序。

内容的提问来源于stack exchange,提问作者user6042013

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:34:55