首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >独立子任务执行

独立子任务执行
EN

Stack Overflow用户
提问于 2019-07-11 23:06:27
回答 1查看 121关注 0票数 0

我是第一次使用TBB,希望运行一系列完全独立的任务。我想使用tbb:: task ::enqueue,即我创建一个根任务,它创建一个独立于父任务的子任务。这个子级可以再次创建任务,依此类推。

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

代码语言:javascript
复制
// 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;
}

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

我只需要一个简单的例子来说明它是如何工作的。

EN

回答 1

Stack Overflow用户

发布于 2019-07-13 17:46:57

通常不建议直接使用TBB任务接口,因为该接口过于复杂,且存在大量隐患。如果你事先知道任务的数量,你可能会想要使用tbb::parallel_for。如果您想在算法执行过程中添加任务,可以使用tbb::parallel_dofeeder功能。如果您不想使用算法,而希望使用任务进行操作,请考虑使用tbb::task_group

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

代码语言:javascript
复制
tbb::task_group tg;
// Run parallel_for in background.
tg.run( [] { 
    tbb::parallel_for(...);
} );
// ...
// Any other code
// ...
tg.wait(); // task_group requires to call `wait` to guarantee that all tasks are really processed

如果您想要保证后台工作的并发执行,您可以将唯一一个将与其他TBB算法一起创建额外工作的任务排入队列。

更新

考虑一下在后台运行函数的run_task助手。

代码语言:javascript
复制
#include "tbb/task.h"
#include <iostream>
#include <thread>

template <typename F>
class task_wrapper : public tbb::task {
    F f_;
public:
    task_wrapper(F f) : f_(f) {}
    tbb::task* execute() override {
        f_();
        return NULL;
    }
};

template <typename F>
void run_task(F f) {
    tbb::task::enqueue(*new(tbb::task::allocate_root()) task_wrapper<F>(f));
}

int main() {
    for (int i = 0; i < 10; ++i) {
        run_task([i] {
            std::cout << i << std::endl;
        });
    }

    // Give time to proceed the background tasks.
    using namespace std::chrono_literals;
    std::this_thread::sleep_for(1s);

    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56992287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档