У нас есть фрагмент кода, который использует 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 не должен поддерживать фиксированное количество рабочих потоков равным количеству ядер?
new
отредактировалиtask
, где выdelete
это сделаете? - person kangshiyin   schedule 24.06.2016