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


Локальное хранилище потока (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