注意:这不是重复的这个问题 https://stackoverflow.com/questions/3786408/number-of-threads-used-by-intel-tbb.
给定一个与 TBB 并行的复杂软件,我如何完全关闭线程?我知道task_scheduler_init:
int nthreads = tbb::task_scheduler_init::default_num_threads();
const char* cnthreads = getenv("TBB_NUM_THREADS");
if (cnthreads) nthreads = std::max(1, atoi(cnthreads));
tbb::task_arena arena(nthreads, 1);
tbb::task_scheduler_init init(nthreads);
然而,这个解决方案(涉及this https://stackoverflow.com/questions/3786408/number-of-threads-used-by-intel-tbb) does not关闭线程。 TBB 仍然创建大量线程,nthreads
只是让其中一些不被使用。此外,如果一个人有nthreads = 1
,TBB 实际上创建了 1 个额外线程 - 加上主线程总共 2 个线程。
Yes,在某些情况下您可能想要完全关闭线程
Using tbb::task_scheduler_init
自 Intel TBB 4.3 Update 5 起已弃用(请参阅文档 https://software.intel.com/en-us/node/506296 and 这个论坛主题 https://software.intel.com/en-us/forums/intel-threading-building-blocks/topic/289355)。您现在可以使用以下命令修改此行为tbb::全局控制 https://software.intel.com/en-us/node/589744全局范围内的类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)