OpenMP 並列コンパイラ指示文:名前付き共通ブロックがスレッドに対して非公開 (局所) であることを指定します。これらはスレッド内では大域です。
形式
c$OMP THREADPRIVATE ( /cb/ [, /cb/] ... )
c
次のいずれか:C (または c),!,* (「並列指示文の構文規則」を参照)
cb
スレッドに対して非公開にしたい共通ブロックの名前。スレッドに対して非公開にできるのは,名前付き共通ブロックだけです。斜線 (/) は必須であることに注意してください。
規則と振る舞い
各スレッドは共通ブロックの独自のコピーを受け取るので,1 つのスレッドが共通ブロックに書き込んだデータは,他のスレッドからは直接には見えません。
プログラムの直列の部分と MASTER セクション中では,参照は共通ブロックのマスタ・スレッドのコピーに対して行われます。最初の並列領域に入った時点で,THREADPRIVATE 共通ブロック中のデータは,PARALLEL 指示文で COPYIN 節が指定されていない限り,不定の状態と見なされます。
THREADPRIVATE 指示文に (DATA 文を使って初期化される) 共通ブロックが指定されている場合,個々のスレッドのコピーはそれが最初に使用される前に 1 回だけ初期化されます。それ以降の並列領域では,THREADPRIVATE 共通ブロック中のデータは,動的スレッド機構が無効化されており,スレッドの数がすべての並列領域で同じである場合にのみ,永続することが保証されます。
THREADPRIVATE 共通ブロックまたはその構成変数は,COPYIN 節でしか指定することができません。これらは PRIVATE,FIRSTPRIVATE,LASTPRIVATE,SHARED,または REDUCTION 節では使用できません。これらは DEFAULT 節の影響は受けません。
関連情報
Compaq Fortran 並列コンパイラ指示文,OpenMP Fortran API コンパイラ指示文,Tru64 UNIX システム用の並列指示文
例
次の例では,共通ブロック BLK1 と FIELDS がスレッドに対して非公開として指定されています。
COMMON /BLK/ SCRATCH COMMON /FIELDS/ XFIELD, YFIELD, ZFIELD c$OMP THREADPRIVATE(/BLK/,/FIELDS/) c$OMP PARALLEL DEFAULT(PRIVATE) COPYIN(/BLK1/,ZFIELD)