~task_scheduler_init()

効果

task_scheduler_init オブジェクトがインアクティブの場合は何も起きません。その他の場合、task_scheduler_init オブジェクトは次のように非アクティブにされます。スレッドにほかのアクティブな task_scheduler_init オブジェクトがない場合、スレッドはタスク・オブジェクトのスケジュールに必要な内部スレッド固有のリソースを解除します。 既存のスレッドにアクティブな task_scheduler_init オブジェクトがない場合、内部ワーカースレッドは終了します。

void initialize( int max_threads=automatic )

要件

task_scheduler_init オブジェクトがインアクティブであること。

効果

コンストラクターに似ています。

void terminate()

要件

task_scheduler_init オブジェクトがアクティブであること。

効果

task_scheduler_init オブジェクトを破棄しないで非アクティブ化します。その結果については、デストラクターの説明を参照してください。

int default_num_threads()

戻り値

task_scheduler_init がデフォルトで作成するワーカースレッドの数 +1。

bool is_active() const

戻り値

*this が「task_scheduler_init クラス」セクションで説明されているようにアクティブな場合は true、アクティブでない場合は false。

OpenMP* との混在使用

インテル® TBB は、OpenMP* との混在使用をサポートしています。2 つの並列処理が入れ子になっている場合、OpenMP* またはインテル® TBB を単体で使用したときよりもパフォーマンスは多少低くなります。

タスク・スケジューラーを使用する OpenMP* 並列領域はインテル® TBB にとって未知の新しいスレッドを作成するため、並列領域の内部で task_scheduler_init を作成する必要があります。 これらの新しい OpenMP スレッドはそれぞれ、ネイティブスレッドのように、インテル® TBB のアルゴリズムを使用する前に task_scheduler_init オブジェクトを作成しなければなりません。次に例を示します。

void OpenMP_Calls_TBB( int n ) {
#pragma omp parallel
     {
         task_scheduler_init init;
#pragma omp for
         for( int i=0; i<n; ++i ) {
             ... task クラスまたは
                インテル® TBB アルゴリズムを使用 ...
         }
     }
}

関連情報