次の方法で共有


threadprivate

変数をスレッドに対してプライベートにします。

#pragma omp threadprivate(var)

解説

指定項目

  • var
    スレッドに対してプライベートにする変数のコンマ区切りリスト。var はグローバルまたは名前空間スコープの変数あるいはローカル静的変数のいずれかである必要があります。

解説

threadprivate ディレクティブは OpenMP 句をサポートしません。

詳細については、「2.7.1 threadprivate ディレクティブ」を参照してください。

threadprivate ディレクティブは、thread__declspec 属性に基づきます。__declspec(thread) の制限が threadprivate に適用されます。

LoadLibrary から読み込まれる DLL には threadprivate を使用できません。こうした DELL には、LoadLibrary を使用する /DELAYLOAD (遅延読み込みのインポート) で読み込まれる DLL も含まれます。

プロセスの起動時に静的に読み込まれる DLL では threadprivate を使用できます。

threadprivate__declspec(thread) に基づくため、threadprivate 変数は、並列領域によって生成されたスレッド チームに含まれるスレッドに限らず、そのプロセス内で起動したどのスレッドにでも存在します。たとえば、予想以上に threadprivate ユーザー定義型のコンストラクタが頻繁に呼び出される場合があるので、この実装情報に注意する必要があります。

消滅可能な型の threadprivate 変数については、デストラクタが呼び出されるかどうかについて保証されません。次に例を示します。

struct MyType 
{
    ~MyType();
};

MyType threaded_var;
#pragma omp threadprivate(threaded_var)
int main() 
{
    #pragma omp parallel
    {}
}

開発者は、並列領域を構成するスレッドがいつ終了するかについて制御できません。プロセスが終了するときにこれらのスレッドが終了する場合、これらのスレッドにプロセスの終了は通知されないので、終了するスレッド (ここではプライマリ スレッド) 以外のスレッドの threaded_var に対してデストラクタが呼び出されません。したがって、コードで threadprivate 変数の正しい消滅をカウントすることは避ける必要があります。

使用例

threadprivate の使用例については、「private」を参照してください。

参照

概念

OpenMP ディレクティブ