Compaq Fortran 並列コンパイラ指示文:コードのブロック参照を,一度に 1 つのスレッドだけに制限します。
形式
c$PAR CRITICAL SECTION [(latch-var)]
c
次のいずれか:C (または c),!,* (「並列指示文の構文規則」を参照)
latch-var
自然に位置合わせされた INTEGER(4) または INTEGER(8) の SHARED 変数。
block
1 つまたは複数の文または構文。このブロックに対して,またはこのブロックから飛び越すことはできません。
規則と振る舞い
クリティカル・セクションは,実行文の Compaq Fortran 文を置ける任意の場所に置くことができます。
ラッチ変数を使うことで,複数のクリティカル・セクションが独自のラッチを持つのか,同じラッチを使用するのかを制御することができます。ラッチ変数名を使用する場合,プログラムは,そのラッチ変数を使用する CRITICAL SECTION が実行される前に,ラッチ変数を明示的にゼロに初期化しなくてはなりません。
ラッチ変数を指定しなければ,コンパイラは個々のクリティカル・セクションに一意のラッチを提供します。
スレッドは,チーム内の他のスレッドが,同じラッチ変数名を持つクリティカル・セクションを実行していない状態になるまで,クリティカル・セクションの先頭で待機します。クリティカル・セクションを実行しているスレッドが END CRITICAL SECTION 指示文に達すると,ラッチ変数は 1 に設定され,他のスレッドがクリティカル・セクションに入れるようになります。
プログラムは,ラッチ変数としての用途がすべて完了するまで,そのラッチ変数を CRITICAL SECTION 以外の場所で再利用してはなりません。
すべての名前なしクリティカル・セクションは,コンパイラが提供したのと同じラッチ変数名にマップされます。クリティカル・セクションのラッチ変数名はプログラムに対して大域です。
関連情報
Compaq Fortran 並列コンパイラ指示文,OpenMP Fortran API コンパイラ指示文,Tru64 UNIX システム用の並列指示文