A.9 single ディレクティブの使用
single ディレクティブ (15 ページの「2.4.3 single コンストラクト」) の使用例を次に示します。この例では、1 つのスレッド (通常は single ディレクティブを検出した最初のスレッド) だけが進捗メッセージを出力します。どのスレッドが single セクションを実行するかについては、想定できません。他のすべてのスレッドは single セクションをスキップし、single コンストラクトの末尾にあるバリアで停止します。他のスレッドが、single セクションを実行しているスレッドを待機しないで続行できるよう設定するには、single ディレクティブで nowait 句を指定します。
#pragma omp parallel
{
#pragma omp single
printf_s("Beginning work1.\n");
work1();
#pragma omp single
printf_s("Finishing work1.\n");
#pragma omp single nowait
printf_s("Finished work1 and beginning work2.\n");
work2();
}