CRITICAL SECTION (TU*X のみ)

Compaq Fortran 並列コンパイラ指示文:コードのブロック参照を,一度に 1 つのスレッドだけに制限します。

形式

c$PAR CRITICAL SECTION [(latch-var)]

block
c$PAR END CRITICAL SECTION

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 システム用の並列指示文