我是第一次与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;
}
我有很多任务要运行(所有任务都是独立的,执行顺序也完全独立),每个任务都可以创建后继任务,但是它是完全独立的,只需将其添加到队列中即可运行。另外,我不需要等待或类似操作,因为执行应在后台运行。
我只需要一个简单的示例向我展示其工作原理。
答案 0 :(得分:0)
通常,不建议直接使用TBB任务API,因为它过于复杂并且包含许多隐藏的问题。如果您事先知道任务数,则可能要使用tbb::parallel_for
。如果要在算法执行期间添加任务,则可以使用feeder
的{{1}}功能。如果您不想使用算法并且想要处理任务,请考虑使用tbb::parallel_do
。
即使应用程序结束,您是否也不需要等待后台工作完成?您可以使用tbb::task_group
创建后台任务,例如
tbb::task_group
如果您想保证后台工作并发执行,则可以将只有一个任务加入队列,该任务将与其他TBB算法一起创建其他工作。