#pragma omp threadprivate
説明
omp threadprivate ディレクティブは、指定されたファイル・スコープ、ネーム・スペース・スコープ、または静的ブロック・スコープ変数を 1 つのスレッド専用にします。
構文

.-,------------.
V |
>>-#--pragma--omp threadprivate----(identifier)-+--------------><
ここで、identifier ファイル・スコープ、ネーム・スペース・スコープ、または静的ブロック・スコープ変数です。
注
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 で指定しているデータ変数には、
不完全型または参照型があってはならない。