次の方法で共有


thread

Microsoft 固有の仕様 →

スレッド によって拡張されたストレージ クラス修飾子がスレッドのローカル変数を宣言するために使用されます。

__declspec( thread ) declarator

解説

スレッド ローカル ストレージは (TLS)プロセスの各スレッドはスレッド固有のデータ用のストレージを割り当てる機能です。標準マルチスレッド プログラムではデータは特定のプロセスのすべてのスレッドでスレッド ローカル ストレージはスレッドのデータを割り当てるための機能であり共有されます。スレッドの詳細についてはマルチスレッド を参照してください。

スレッド ローカルな変数宣言が スレッド キーワードの 拡張属性構文 と __declspec のキーワードを使用する必要があります。たとえば、次に示すコードは、整数型のスレッド ローカル変数を宣言して特定の値に初期化します。

__declspec( thread ) int tls_i = 1;

スレッド ローカル オブジェクトや変数を宣言する場合は次のガイドラインを確認し:

  • データの宣言と定義だけに スレッド のメンバー関数がになると属性をクラスに適用できます。; スレッド は関数宣言または関数定義で使用することはできません。

  • スレッド の属性の使用はDLL のインポート 遅延読み込み に干渉する可能性があります。

  • 静的ストレージの期間のデータ項目に対してだけ スレッド の属性を指定できます。これはグローバル データ オブジェクト ( 静的 と extern 両方)クラスのローカルな静的オブジェクトと静的データ メンバーが含まれています。 スレッド の属性を自動データ オブジェクトを宣言できません。

  • 宣言と定義が同じファイルまたは別のファイルに行われるのかスレッドのローカル オブジェクトの宣言と定義に スレッド の属性を使用する必要があります。

  • 型修飾子として スレッド の属性は使用できません。

  • POD のクラスだけ __declspec(thread) を使用してインスタンス化される場合があります。スレッド属性はオブジェクトはクラス宣言の一部として宣言されて無視されます。次に例を示します。

    // declspec_thread.cpp
    // compile with: /LD
    __declspec(thread) class X
    {
    public:
       int I; 
    } x;   // x is a thread object
    
    X y;   // y is not a thread object
    
  • スレッド の属性を使用してオブジェクトの宣言が許可されるためこれらの二つの例では同じ意味です :

    // declspec_thread_2.cpp
    // compile with: /LD
    __declspec( thread ) class B {
    public:
       int data;
    } BObject;   // BObject declared thread local.
    
    class B2 {
    public:
       int data;
    };
    __declspec( thread ) B2 BObject2;   // BObject2 declared thread local.
    
  • オブジェクトの標準 C の初期化やそれ自体への静的範囲のオブジェクトの参照だけを含む式の変数。通常C++ の割り当てがスレッドのローカル オブジェクトおよび自身を参照している式でオブジェクトを動的に初期化されます。この型は使用できません。次に例を示します。

    // declspec_thread_3.cpp
    // compile with: /LD
    #define Thread __declspec( thread )
    int j = j;   // Okay in C++; C error
    Thread int tls_i = sizeof( tls_i );   // Okay in C and C++
    

    初期化されるオブジェクトが含まれている sizeof の式がそれ自体への参照を構成せずに C および C++ で許可することに注意してください。

終了 Microsoft 固有の仕様→

参照

関連項目

__declspec

C++ のキーワード

概念

スレッド ローカル ストレージ (TLS: Thread Local Storage)