omp threadprivate ディレクティブは、スレッドに private になる名前付きのファイル・スコープ、名前スペース・スコープ、または静的ブロック・スコープ変数を作成します。
#pragma omp threadprivate (list)
ここで、list は、変数のコンマ区切りのリストです。
omp threadprivate データ変数の各コピーは、そのコピーを最初に使用する前に一度初期化されます。
threadprivate データ変数を初期化するために、オブジェクトが使用前に変更された場合、振る舞いは指定解除されます。
スレッドは、omp threadprivate データ変数の別のスレッドのコピーを参照してはなりません。プログラムの直列領域およびマスター領域の実行時に、参照は常にデータ変数のマスター・スレッドのコピーに対して行われます。
omp threadprivate ディレクティブの使用は、以下の点で管理されています。
- omp threadprivate ディレクティブは、すべての定義および宣言外のファイル・スコープになければならない。
- omp threadprivate ディレクティブは、静的ブロック・スコープ変数に対して適用でき、字句ブロック内に出現してそれらのブロック・スコープ変数を参照することができる。このディレクティブは、ネストされたスコープ内ではなく、変数のスコープ内にあり、かつそのリスト内の変数に対するすべての参照の前に出現しなければなりません。
- データ変数は、omp threadprivate ディレクティブの list に組み込む前に、ファイル・スコープで宣言しなければならない。
- omp threadprivate ディレクティブとその list の字句は、その list 内にあるデータ変数への参照の前になければならない。
- ある変換単位で omp threadprivate ディレクティブに指定しているデータ変数は、その変数が宣言されている他のすべての変換単位でも同様に指定しておかなければならない。
- omp threadprivate list 内で指定されたデータ変数は、
copyin、copyprivate、if、
num_threads、および schedule 文節以外の文節に出現してはならない。
- omp threadprivate list 内のデータ変数のアドレスは、アドレス定数ではない。
- omp threadprivate list で指定しているデータ変数には、不完全型または参照型があってはならない。
並列処理を制御するプラグマ
