在 TBB 中执行两个并行任务的简单方法

Simple way to execute two parallel tasks in TBB

我需要使用英特尔线程构建模块执行两个并行任务,并等待两个任务完成。

我可以这样做:

        tbb::parallel_for( tbb::blocked_range<int>( 0, 2, 1 ), [&] ( const tbb::blocked_range<int>& range )
        {
            for ( int i = range.begin(); i < range.end(); ++i )
            {
                if ( i == 0 )
                    task0();
                else if ( i == 1 )
                    task1();
            }
        } );

但我想 tbb::parallel_for 不是最好的解决方案;在 TBB 中是否有 better/simpler 方法来实现相同的目的?

对于少量任务,可以使用tbb::task_group:

tbb::task_group g;

g.run([&] { task0(); });
g.run([&] { task1(); });

// do other work while tasks run ...

g.wait(); // wait for all tasks to finish

作为一个小优化,可以运行当前线程中的任务之一:

tbb::task_group g;

g.run([&] { task1(); }); // spawn a parallel task

task0(); // run one task in current thread

g.wait(); // wait for parallel task(s) to finish