独立子任务执行

时间:2019-07-11 15:06:26

标签: c++ tbb

我是第一次与TBB合作,想要执行一系列独立的任务。我想使用tbb :: task :: enqueue,即我创建了一个根任务,它创建了一个独立于父任务的子任务。这个孩子可以再次创建任务,依此类推。

我的解决方案不起作用,因为子任务再次调用了父任务,而我却得到了无尽的级联。根任务的执行有效,但是一旦创建了一个子级,就会出现无尽的级联。


// initialization
tbb::task::enqueue( *new( tbb::task::allocate_root() ) tbbwrapper::ctask( <some data> ) );

// execute method
tbb::task* ctask::execute()
{
    <execute data processing>

    return <data result correct> 
    ? new( this->allocate_child() ) tbbwrapper::ctask( <result data> ) 
    : NULL;
}

我有很多任务要运行(所有任务都是独立的,执行顺序也完全独立),每个任务都可以创建后继任务,但是它是完全独立的,只需将其添加到队列中即可运行。另外,我不需要等待或类似操作,因为执行应在后台运行。

我只需要一个简单的示例向我展示其工作原理。

1 个答案:

答案 0 :(得分:0)

通常,不建议直接使用TBB任务API,因为它过于复杂并且包含许多隐藏的问题。如果您事先知道任务数,则可能要使用tbb::parallel_for。如果要在算法执行期间添加任务,则可以使用feeder的{​​{1}}功能。如果您不想使用算法并且想要处理任务,请考虑使用tbb::parallel_do

即使应用程序结束,您是否也不需要等待后台工作完成?您可以使用tbb::task_group创建后台任务,例如

tbb::task_group

如果您想保证后台工作并发执行,则可以将只有一个任务加入队列,该任务将与其他TBB算法一起创建其他工作。