【发布时间】:2016-06-24 13:52:12
【问题描述】:
我们有一段代码利用 TBB 生成任务来执行一些处理,这是使用以下 TBB 代码初始化 TBB 线程池完成的:
tbb::task_scheduler_init(8);
然后对于我们想要生成的每个任务,我们使用以下代码(其中 MainTask 派生自 tbb::task 类):
task = new (tbb::task::allocate_root()) MainTask(theAction, theOutputData);
tbb::task::enqueue(*task);
当我们运行我们的代码时,我们从一个线程池开始,该线程池与预期的内核数量(在我们的例子中为 8 个线程)相同,但随着程序执行并产生新的 TBB 任务,如上所述,数量某些随机点的线程数突然增加。程序执行 40 分钟后,线程数从 8 个增加到 15 个。
为什么会这样? TBB 不应该将工作线程的数量固定为等于内核的数量吗?
【问题讨论】:
-
是否有可能在 TBB 外部创建线程?线程是一种系统资源,程序的任何其他部分都可以创建它们。
-
如果你
new-编辑了task,你在哪里delete呢?