2017-08-14 10 views
0

スレッドビルディングブロック(TBB)では、同じスコープ内で2つのタスクスケジューラを初期化すると、最初の初期化の引数が遅延されない限り、2番目の初期化の引数は無視されます。競合を避けるために、タスクスケジューラが自分のプログラムの初期に初期化されているかどうかを調べたいと思います。それを行う方法はありますか?もしそうなら、それに対する議論は何でしたか?TBBには、既存のタスクスケジューラがあるかどうかを調べる方法はありますか?

答えて

2

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()機能を使用して、要求されたスレッド数を取得できます。ただし、以前のタスクスケジューラの初期化中に使用されたスタックサイズを取得することはできません。

関連する問題