Поделиться через


thread

Только для систем Microsoft

Поток расширенный модификатор хранени-класса используется для того, чтобы объявить локальную переменную потока.

__declspec( thread ) declarator

Заметки

Локальное хранилище потока (TLS) - это механизм, с помощью которого каждый поток многопоточного процесса выбирает хранилища для данных поток-специфического.В стандартных многопоточных программах, данные разделены среди всех потоков данного процесса, тогда как локальное хранилище потока механизм для выбора данные для отдельного потока.Подробное обсуждение потоков см. в разделе многопоточность.

Объявления должны использовать локальные переменные потока расширенный синтаксис атрибутов и __declspec ключевое слово with Поток ключевое слово.В следующем примере кода показано, как объявлять целочисленную локальную переменную потока и инициализировать её некоторым значением:

__declspec( thread ) int tls_i = 1;

Необходимо учитывать следующие рекомендации при объявлении локальные объекты и переменные потока:

  • Можно применить Поток атрибут только к объявлениям и определения данных и классы, которые не имеют функции-члены; Поток нельзя использовать в объявлениях или определениях функций.

  • Использование Поток атрибут может повлиять на загрузка задержки библиотека DLL записей**.**

  • Можно указать Поток атрибут только на элементах данных с длительностью статического хранилища.Сюда относятся глобальные объекты данных (оба Статический и extern), локальные статические объекты и статические элементы данных классов.Нельзя объявить автоматические объекты данных Поток атрибут.

  • Необходимо использовать Поток атрибут для объявления и определения локального объекта потока, возникают ли объявление и определение в одном файле или в отдельных файлах.

  • Нельзя использовать Поток атрибут как модификатор типа.

  • Только классы могут создаваться с помощью СТРУЧКА __declspec (поток).Атрибут потока не учитывается, если отсутствует объект не объявлен как часть объявления класса.Примеры.

    // 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
    
  • Поскольку объявление объектов, использующих Поток допускается атрибут, эти 2 примера, семантически эквивалентен:

    // 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# обеспечивает инициализацию объекта или переменной с выражением включая ссылку на себя, но только для объектов нестатического области памяти.Хотя C++ обычно обеспечивает ту динамическую инициализацию объекта с выражением включая ссылку на себя, этот тип инициализации не допускается с локальными объектами потока.Примеры.

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

    Обратите внимание, что значение a sizeof выражение, включающее инициализируемого объекта объект не представляет собой ссылку на себя и разрешено в c# и C++.

ЭЛЕМЕНТ, относящийся Майкрософт

См. также

Ссылки

__declspec

Ключевые слова C++

Основные понятия

Локальное хранилище потока (TLS)