task_scheduler_init( int max_threads=automatic, stack_size_type thread_stack_size=0 )

要件

max_threads 値は、下記の表の 1 つでなければなりません。

効果

max_threads==task_scheduler_init::deferred の場合は何も起きず、task_scheduler_init オブジェクトはインアクティブのままです。その他の場合、task_scheduler_init オブジェクトは次のようにアクティブ化されます。スレッドにほかのアクティブな task_scheduler_init オブジェクトがない場合、スレッドはタスク・オブジェクトのスケジュールに必要な内部スレッド固有のリソースを割り当てます。アクティブな task_scheduler_init オブジェクトを含むスレッドがまだない場合、下記の表で説明されているように内部ワーカースレッドが作成されます。これらのワーカースレッドは、タスク・スケジューラーで必要になるまでスリープしています。スケジューラーによって作成された各ワーカースレッドは、task_scheduler_init オブジェクトを暗黙的にアクティブにします。

インテル® TBB 3.0 の時点では、max_threads 引数が別々の呼び出しスレッドで異なることは意味があります。例えば、スレッド A が max_threads=3 を指定してスレッド B が max_threads=7 を指定した場合、A は 2 つのワーカースレッドに制限されますが、B は 6 つまでのワーカースレッドを扱うことができます。ワーカースレッドは A と B で共有される可能性があるため、スケジューラーによって作成されるワーカースレッドの合計は 6 になります。

一部の実装では、必要な数よりも多くのワーカースレッドを作成します。ただし、必要ない場合はスリープしたままです。

オプションの thread_stack_size 引数は、ワーカースレッドのスタックサイズを指定します。値 0 は、デフォルトのスタックサイズを使用するように指定します。最初のアクティブな task_scheduler_init がすべてのワーカースレッドのスタックサイズを決定します。

max_threads の値

max_threads

意味

task_scheduler_init::automatic

ライブラリーがハードウェア構成に基づいて max_threads を決定するようにします。

task_scheduler_init::deferred

アクティブ化を遅らせます。

正の整数

呼び出しスレッドに基づいて max_threads-1 までのワーカースレッドを要求します。