Freigeben über


thread

Microsoft-spezifisch

Der thread erweiterte Speicherklassen modifizierer wird verwendet, um einen Thread zu deklarierenden lokale Variable.

__declspec( thread ) declarator

Hinweise

Lokaler Threadspeicher (TLS) ist der Mechanismus, durch den jeder Thread in einem Prozess Multithreading Speicher für threadspezifische Daten zuordnet.In den Multithreading StandardProgrammen werden Daten von allen Threads eines angegebenen Prozesses freigegeben, während lokalen Threadspeicher der Mechanismus zum Zuordnen eines threadspezifischen Daten ist.Eine vollständige Erläuterung Threads finden Sie unter Multithreading.

Deklarationen von lokalen Variablen des Threads müssen Syntax des erweiterten Attributs und das __declspec-Schlüsselwort den thread-Schlüsselwort verwenden.Mit folgendem Code wird z. B. eine Ganzzahl-TLS-Variable deklariert und mit einem Wert initialisiert:

__declspec( thread ) int tls_i = 1;

Sie müssen diese Richtlinien beachten, wenn ein Thread lokale Objekte und Variablen deklariert wurde:

  • Sie können das Threadattribut nur auf die Deklarationen und Definitionen und Klassen anwenden, die keine Memberfunktionen haben. thread kann nicht auf Funktionsdeklarationen oder - definitionen verwendet werden.

  • Die Verwendung des verzögerte Laden von DLL-Importen können behindert Threadattribut**.**

  • Sie können das Threadattribut nur für Datenelemente mit statisches Speicher dauer angeben.Hierzu zählen globale Datenobjekte ( static und extern), lokale statische Objekte und statische Datenmember von Klassen.Sie können die automatische Datenobjekte mit dem Threadattribut nicht deklarieren.

  • Sie müssen das Threadattribut für die Deklaration und Definition eines lokalen Objekts des Threads verwenden, ob die Deklaration und Definition in der gleichen Datei oder in separaten Dateien auftreten.

  • Sie können das Threadattribut nicht als Typmodifizierer verwenden.

  • Nur PODS sind möglicherweise Klassen mit **__declspec (thread)**instanziiert.Das Threadattribut wird ignoriert, wenn kein Objekt als Teil der Klassendeklaration deklariert ist.Beispiele:

    // 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
    
  • Da die Deklaration von Objekten, die die Threadattribut verwenden, nicht zulässig ist, sind diese beiden Beispielen semantisch gleichwertig:

    // 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.
    
  • Standard-C ermöglicht die Initialisierung eines Objekts oder Variable mit einem Ausdruck, der einen Verweis auf sich selbst, sondern nur für nicht statische Objekte des Blocks enthält.Obwohl solche normalerweise C++ dynamische Initialisierung eines Objekts mit einem Ausdruck zulässt, der einen Verweis auf sich selbst enthält, wird dieser Typ der Initialisierung nicht mit Objekten der Thread lokalen Variablen zulässig.Beispiele:

    // 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++
    

    Beachten Sie, dass ein sizeof Ausdruck, der das Objekt enthält, die initialisiert wird, keinen Verweis auf sich selbst haben und in C und C++ zugelassen wird.

Microsoft ENDES bestimmten

Siehe auch

Referenz

__declspec

C++-Schlüsselwörter

Konzepte

Lokaler Threadspeicher (TLS)