Partager via


thread

Spécifique à Microsoft

le modificateur de classe de stockage étendu par thread est utilisé pour déclarer une variable locale de thread.

__declspec( thread ) declarator

Notes

Le stockage (TLS) local des threads est le mécanisme par lequel chaque thread d'un processus multithread alloue le stockage des données de propres.Dans les programmes multithread standard, les données sont partagées parmi tous les threads d'un processus donné, alors que le stockage local des threads est le mécanisme pour allouer des données par thread.Pour une description complète des threads, consultez multithreading.

Les déclarations de variables locales de thread doivent utiliser syntaxe d'attribut étendu et le mot clé d' __declspec avec le mot clé de thread .Par exemple, le code suivant déclare une variable locale de thread entière et lui affecte une valeur initiale :

__declspec( thread ) int tls_i = 1;

Vous devez respecter ces indications en déclarant le thread les objets locaux et les variables :

  • Vous pouvez appliquer l'attribut de thread uniquement aux déclarations et définitions de données, et des classes qui n'ont pas de fonctions membres ; thread ne peut pas être utilisé sur des définitions ou des déclarations de fonction.

  • L'utilisation de l'attribut thread peut interférer avec chargement différé des importations**.**de DLL

  • Vous pouvez spécifier l'attribut de thread uniquement pour les éléments de données avec la durée de stockage statique.Cela comprend les objets de données globaux ( statique et extern), les objets statiques locaux, et les membres de données statiques des classes.Vous ne pouvez pas déclarer des objets de données automatiques avec l'attribut de thread.

  • Vous devez utiliser l'attribut de thread pour la déclaration et la définition d'un objet local de thread, si la déclaration et la définition se produisent dans le même fichier ou fichiers séparés.

  • Vous ne pouvez pas utiliser l'attribut de thread comme modificateur de type.

  • Seules les classes POD peuvent être instanciées en utilisant __declspec (thread).L'attribut de thread est ignoré si aucun objet n'est déclaré dans le cadre de la déclaration de classe.Par exemple :

    // 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
    
  • Étant donné que la déclaration des objets qui utilisent l'attribut de thread est autorisée, ces deux exemples sont équivalents :

    // 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 standard permet l'initialisation d'un objet ou d'une variable avec une expression impliquant une auto-référence, mais uniquement pour les objets de étendue non statique.Bien que C++ soient normalement une telle initialisation dynamique d'un objet avec une expression impliquant une auto-référence, ce type d'initialisation n'est pas autorisé avec des objets locaux de thread.Par exemple :

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

    Notez qu'une expression d' sizeof qui inclut l'objet initialisé ne constitue pas une auto-référence et elle en C et C++.

TERMINEZ le détail de Microsoft

Voir aussi

Référence

__declspec

Mots clés C++

Concepts

Stockage local des threads (TLS)