Не использовать tbb::task_scheduler_init
класс; он уже устарел и в конечном итоге будет удален. Если вам нужно ограничить количество потоков в глобальном масштабе, используйте вместо этого tbb::global_control
; если вы хотите ограничить параллелизм для данной работы, используйте tbb::task_arena
. В последнем случае у вас также не возникнет проблем с присоединением к нему наблюдателя.
Чтобы создать наблюдателя для арены текущей задачи, используйте tbb::task_scheduler_observer(true)
. Логический аргумент используется, чтобы отличать guish такого «локального» наблюдателя от «глобального», то есть не привязанного ни к какой конкретной c арене («глобальная» семантика была исходной для наблюдателей TBB, и он принял конструктор по умолчанию).
Вы также можете создать объект task_arena
, прикрепленный к текущей арене, и использовать его для инициализации наблюдателя, а также для отправки задания. Для этого постройте или инициализируйте арену с помощью специального аргумента: tbb::task_arena(tbb::task_arena::attach())
.