Sdílet prostřednictvím


vlákno

Specifické pro produkty společnosti Microsoft

Modifikátor rozšířené paměťové třídy thread se používá pro deklarování místní proměnné vlákna.

__declspec( thread ) declarator

Poznámky

Místní úložiště vláken (TLS) je mechanismus, podle kterého všechna vlákna procesu alokují prostor pro data určitého vlákna.U standardních aplikací s více vlákny jsou data sdílena mezi všemi vlákny daného procesu, kde místní úložiště vláken představuje mechanismus pro rozdělení dat pro vlákno.Úplný popis vláken naleznete v tématu Multithreading.

Deklarace místních proměnných vlákna musí použít syntaxi rozšířeného atributu a klíčové slovo __declspec s klíčovým slovem thread.Například následující kód deklaruje místní proměnnou vlákna integer a inicializuje ji hodnotou:

__declspec( thread ) int tls_i = 1;

Tyto pokyny je nutné při deklarování místních objektů a proměnných vlákna dodržovat:

  • Atribut thread lze použít pouze na deklarace a definice dat a tříd, které nemají členské funkce. Atribut thread nelze použít v deklaracích nebo definicích funkce.

  • Použití atributu thread může být v rozporu s zpožděním načítání importů knihoven DLL**.**

  • Atribut thread lze použít pouze na položky dat se statickou dobou uchování.To zahrnuje globální datové objekty (static a extern), místní statické objekty a statické datové členy tříd.Automatické datové objekty nelze deklarovat s atributem thread.

  • Pro deklarace a definice místního objektu vlákna je nutné atribut thread použít, pokud se deklarace a definice objeví ve stejném souboru nebo v samostatných souborech.

  • Atribut thread nelze použít jako modifikátor typu.

  • Pomocí __declspec(thread) lze vytvořit pouze třídy POD.Atribut thread je ignorován, pokud není žádný objekt deklarován jako součást deklarace třídy.Příklad:

    // 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
    
  • Následující dva příklady jsou sémanticky ekvivalentní, protože deklarace objektů jazyka C++, které používají atribut thread, jsou povoleny:

    // 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 jazyka C umožňuje inicializaci objektu nebo proměnné s výrazem zahrnujícím odkaz sám na sebe, ale pouze pro nestatické objekty.Přestože jazyk C++ obvykle umožňuje takovou dynamickou inicializaci objektu s výrazem zahrnujícím odkaz sám na sebe, tento typ inicializace není povolen s místními objekty vlákna.Příklad:

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

    Všimněte si, že výraz sizeof, který obsahuje inicializovaný objekt, nepředstavuje odkaz sám na sebe a je povolen v jazyce C i C++.

Specifické pro produkty společnosti Microsoft - konec

Viz také

Referenční dokumentace

__declspec

Klíčová slova jazyka C++

Koncepty

Lokální úložiště vláken (TLS)