2.9 ディレクティブの入れ子
ディレクティブの動的な入れ子は、次の規則に準ずる必要があります。
別の parallel に動的に入れ子になった parallel ディレクティブは、論理的に新しいチームを構築します。入れ子にされた並列化が有効でない限り、この新しいチームは現在のスレッドだけで構成されます。
同じ parallel にバインドされる for、sections、single の各ディレクティブは、それぞれ入れ子にはできません。
同じ名前の critical ディレクティブをそれぞれ入れ子にすることはできません。ただし、この制限はデッドロックを回避するのに十分なものではありません。
for、sections、single の各ディレクティブは、critical、ordered、master の各領域と同じ parallel にバインドされている場合、その領域の動的範囲内には存在できません。
barrier ディレクティブは、for、ordered、sections、single、master、critical の各領域と同じ parallel にバインドされている場合、その領域の動的範囲内には存在できません。
master ディレクティブは、for、sections、single の各ディレクティブと同じ parallel にバインドされている場合、これら work-sharing ディレクティブの動的範囲内には存在できません。
ordered ディレクティブは、critical 領域と同じ parallel にバインドされている場合、その領域の動的範囲内には存在できません。
並行領域内部で動的に実行されるときに許可されるディレクティブは、並行領域外で実行されるときにも許可されます。ユーザー指定の並行領域外で動的に実行されるとき、そのディレクティブはマスタ スレッドでのみ構成されるチームによって実行されます。