在 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
我需要使用英特尔线程构建模块执行两个并行任务,并等待两个任务完成。
我可以这样做:
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