Udostępnij za pośrednictwem


thread

Programu Microsoft

Wątku Aby zadeklarować zmienną lokalną dla wątku stosowany jest modyfikator rozszerzone klasy magazynowania.

__declspec( thread ) declarator

Uwagi

Lokalnego magazynu wątków (TLS) to mechanizm, przez który każdego wątku w wielowątkowym procesie przydziela przechowywania danych zależnych od wątku.W standardowych programów wielowątkowych danych jest współużytkowane przez wszystkie wątki danego procesu lokalnego magazynu wątków jest mechanizm podziału danych dla wątku.Szczegółowe omówienie wątków, zobacz Multithreading.

Deklaracje zmiennych lokalnych dla wątku, należy użyć składni atrybutu rozszerzonego i __declspec słowa kluczowego z wątku słowa kluczowego.Na przykład poniższy kod deklaruje zmiennej lokalnej wątku do liczby całkowitej i inicjuje ją z wartością:

__declspec( thread ) int tls_i = 1;

Wytyczne te muszą przestrzegać w przypadku deklarowania zmiennych i obiektów lokalnych wątku:

  • Można zastosować wątku atrybut tylko do deklaracji danych i definicje i klas, które nie mają funkcji elementów członkowskich; wątek nie można stosować do deklaracji funkcji lub definicji.

  • Użycie wątku atrybut może kolidować z opóźnienie ładowanie biblioteki DLL przywozu**.**

  • Można określić wątku atrybut tylko elementy danych z czasem trwania składowania statyczne.Dotyczy to obiektów danych globalnych (zarówno statyczne i extern), lokalne obiekty statyczne i członkowie danych statycznych klas.Nie można zadeklarować obiekty automatyczne danych z wątku atrybut.

  • Należy użyć wątku atrybut deklaracji i definicji obiektu lokalnego w wątku, czy deklaracja i definicji występują w tym samym pliku lub oddzielne pliki.

  • Nie można użyć wątku atrybutu jako modyfikator typu.

  • Tylko klasy POD może zostać zrealizowane przy użyciu __declspec(thread).Atrybut wątku jest ignorowany, jeśli żaden obiekt nie jest zadeklarowany jako część deklaracji klasy.Na przykład:

    // 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
    
  • Ponieważ deklaracji obiektów, które używają wątku atrybut jest dozwolone, te dwa przykłady są semantycznie równoważne:

    // 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.
    
  • Standardowy c pozwala na zainicjowanie obiektu lub zmiennej za pomocą wyrażenia obejmujące odniesienie do siebie, ale tylko dla obiektów o zakresie niestatycznego.Chociaż zwykle C++ zezwala na takie dynamiczne inicjowania obiektu z wyrażeniem obejmujących odwołanie do samej siebie, tego typu inicjalizacji nie jest dozwolona w lokalnych obiektów w wątku.Na przykład:

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

    Należy zauważyć, że sizeof wyrażenia, która zawiera obiekt, inicjowany nie stanowi odwołanie do samej siebie i jest dozwolony w c i C++.

KONIEC Microsoft szczególne

Zobacz też

Informacje

__declspec

Słów kluczowych języka C++

Koncepcje

Lokalnego magazynu wątków (TLS)