我有一个tbb::task_scheduler_init
实例init
,在我想要运行的代码的后续部分中,在代码的一部分中使用了一定数量的线程进行了初始化具有不同数量的线程。如何通过此实例init
完成此操作?
有没有比做以下更好的方法?
init.terminate();
init.initialize(my_preferred_number_of_threads);
/*
run some code
*/
init.terminate();
init.initialize(original_number_of_threads); // restore the original tbb scheduler
答案 0 :(得分:0)
您可以根据需要使用tbb :: task_arena。
取自tbb :: task_arena文档
tbb::task_scheduler_init def_init; // Use the default number of threads.
tbb::task_arena limited(2); // No more than 2 threads in this arena.
tbb::task_group tg;
limited.execute([&]{ // Use at most 2 threads for this job.
tg.run([]{ // run in task group
tbb::parallel_for(1, N, unscalable_work());
});
});
// Run another job concurrently with the loop above.
// It can use up to the default number of threads.
tbb::parallel_for(1, M, scalable_work());
// Wait for completion of the task group in the limited arena.
limited.execute([&]{ tg.wait(); });