退出TBB应用程序(任务调度程序)

时间:2010-12-04 20:22:28

标签: c++ multithreading parallel-processing exit tbb

我目前正在使用线程构建块来启动我的最新应用程序,使用任务调度程序。

如果我的某个任务遇到退出程序的原因:

1。)我怎样才能告诉所有其他任务返回?

2.。)如何在主线程中验证所有其他任务已经返回,以便我可以安全退出应用程序?

谢谢!

2 个答案:

答案 0 :(得分:1)

问题的第一部分已经回答,你可以使用task cancellation来阻止任务被安排执行。 E.g:

tbb::parallel_for(0,100, [](int i){
    for(int j = 0; j < 10000000 && !task::self().is_cancelled(); j++) {
        if( must_stop )
            task::self().cancel_group_execution();
        else
            do_my_work();
    }
});

在上面的示例中,主线程将等待所有任务像往常一样终止,因为它是同步类型的API。但如果您的问题暗示存在异步运行的任务,请考虑使用low-level TBB scheduler API或高级tbb::task_group,如:

tbb::task_group g;
g.run([]{ Do_my_work1(); });
g.run([]{ Do_my_work2(); });
...
g.cancel();
g.wait();

最后,有阻止终止预览功能(搜索TBB_PREVIEW_WAITING_FOR_WORKERS),如果您不仅需要等待任务完成执行而且还需要等待TBB工作人员终止时,这将有所帮助。

答案 1 :(得分:0)

有许多功能to cancel taskscheck for cancellation。环顾四周...你会发现更多。