TBB:如何在代码的不同部分设置不同数量的线程?

时间:2017-09-19 00:07:27

标签: c++ multithreading tbb

我有一个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

1 个答案:

答案 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(); });