Condividi tramite


thread

Specifici di Microsoft

thread il modificatore esteso della classe di archiviazione utilizzato per dichiarare una variabile locale di thread.

__declspec( thread ) declarator

Note

La memoria (TLS) locale di thread è il meccanismo con cui ogni thread di un processo multithread alloca l'archiviazione dei dati specifici.Nei programmi multithread standard, i dati vengono condivisi tra tutti i thread di un processo specificato, mentre la memoria locale di thread è il meccanismo per allocare dati per thread.Per una descrizione completa dei thread, vedere multithreading.

Le dichiarazioni delle variabili locali di thread devono utilizzare sintassi degli attributi estesa e __declspec parola chiave con thread parola chiave.Nel codice seguente, ad esempio, viene dichiarata una variabile locale di thread di tipo integer e quindi inizializzata con un valore:

__declspec( thread ) int tls_i = 1;

È necessario rispettare le linee guida riportate nella dichiarazione di oggetti locali e le variabili di thread:

  • È possibile applicare thread attributo solo a dichiarazioni e definizioni di dati e classi che non hanno funzioni membro, thread non può essere utilizzato nelle dichiarazioni o definizioni di funzione.

  • L'utilizzo di thread l'attributo può interferire con caricamento ritardato imports di DLL**.**

  • È possibile specificare thread attributo solo per elementi di dati con durata di archiviazione statica.Sono inclusi gli oggetti dati globali (nessuno statico e extern), oggetti statici locali e membri dati statici delle classi.Non è possibile dichiarare gli oggetti dati automatici con thread attributo.

  • È necessario utilizzare thread attributo per la dichiarazione e la definizione di un oggetto locale di thread, se la definizione e la dichiarazione si verificano nello stesso file o file separati.

  • Non è possibile utilizzare thread attributo come modificatore di tipo.

  • Solo le classi POD è possibile crearne un'istanza utilizzando __declspec (thread).L'attributo thread viene ignorato se nessun oggetto viene dichiarato come parte della dichiarazione di classe.Di seguito è riportato un esempio:

    // 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
    
  • Poiché la dichiarazione di oggetti che utilizzano thread l'attributo è valido, i due esempi è semanticamente equivalente:

    // 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.
    
  • Il linguaggio c standard consente l'inizializzazione di un oggetto o una variabile con un'espressione che include un riferimento a se stesso, ma solo per oggetti di tipo non statico.Sebbene il linguaggio C++ in genere consenta questo tipo di inizializzazione dinamica di un oggetto con un'espressione che include un riferimento a se stesse, questo tipo di inizializzazione non è consentito con gli oggetti locali di thread.Di seguito è riportato un esempio:

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

    si noti che a sizeof l'espressione che include l'oggetto inizializzato non costituisce un riferimento a se stessa ed è valida in c# e C++.

Microsoft FINALE specifico

Vedere anche

Riferimenti

__declspec

Parole chiave C++

Concetti

Archiviazione locale di thread (TLS)