要件
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 |
意味 |
---|---|
task_scheduler_init::automatic |
ライブラリーがハードウェア構成に基づいて max_threads を決定するようにします。 |
task_scheduler_init::deferred |
アクティブ化を遅らせます。 |
正の整数 |
呼び出しスレッドに基づいて max_threads-1 までのワーカースレッドを要求します。 |