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