在TBB中,有没有办法找出是否有现有的任务调度程序?
问题描述:
在线程构建模块(TBB)中,如果我在相同范围内初始化2个任务调度器,除非第一个初始化的参数被延迟,否则第二个初始化的参数将被忽略。为了避免任何冲突,我想知道一个任务调度器是否已经在我的程序的早期初始化。有没有办法做到这一点?如果是这样,那么这个论点是什么?在TBB中,有没有办法找出是否有现有的任务调度程序?
答
您可能要考虑tbb::this_task_arena::current_thread_index()
和tbb::this_task_arena::max_concurrency()
的功能。
如果线程尚未初始化任务调度程序,tbb::this_task_arena::current_thread_index()
函数将返回“tbb::task_arena::not_initialized
”。 (documentation link)。
如果任务调度程序已经初始化,您可以使用tbb::this_task_arena::max_concurrency()
函数获取请求的线程数。但是,您无法获取之前任务计划程序初始化期间使用的堆栈大小。