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

Метод локального хранилища потока позволяет каждому потоку многопоточного процесса выделять адреса для хранения данных для определенного потока. Динамически связываемые данные отдельных потоков (времени выполнения) поддерживаются с помощью TLS API-функций ([TlsAlloc], [TlsGetValue], [TlsSetValue] и [TlsFree]). Помимо существующей реализации API компилятор Win32 и Visual C++ теперь поддерживают статически связываемые данные, специфичные для каждого потока (времени загрузки).

Реализация API для TLS

Метод локального хранилища потока реализуется на уровне Win32 API и компилятора. Дополнительные сведения см. в документации по API Win32 для функций [TlsAlloc], [TlsGetValue], [TlsSetValue] и [TlsFree].

Компилятор Visual C++ содержит ключевое слово, позволяющее добиться более высокого уровня автоматизации выполнения операций TLS, чем на уровне API. Описание синтаксиса представлено в следующем разделе — Реализация компилятора для TLS.

Реализация компилятора для TLS

Для поддержки TLS в языки C и C++ добавлен новый атрибут thread, поддерживаемый компилятором Visual C++. Этот атрибут является расширенным модификатором класса хранилища, как описано в предыдущем разделе. Используйте ключевое слово __declspec для объявления переменной thread. В следующем примере кода показано, как объявлять целочисленную локальную переменную потока и инициализировать её некоторым значением:

__declspec( thread ) int tls_i = 1;

См. также

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

Реализация многопоточности на языке C с помощью функций Win32

Правила и ограничения протокола TLS