Spec-Zone.ru › GCC 13

6.64 Локальное хранилище потоков

Локальное хранилище потоков (TLS) — это механизм, с помощью которого переменные выделяются таким образом, что существует по одному экземпляру переменной на каждый активный поток. Используемая модель выполнения GCC для реализации этого механизма изначально основана на спецификации IA-64, но с тех пор была перенесена и на другие процессоры. Для работы требуется значительная поддержка от компоновщика (ld), динамического компоновщика (ld.so) и системных библиотек (libc.so и libpthread.so), поэтому она не доступна везде.

На уровне пользователя расширение видно с помощью нового ключевого слова для описания области хранения: __thread. Например:

__thread int i;
extern __thread struct state s;
static __thread char *p;

Спецификатор __thread может использоваться самостоятельно, с спецификаторами extern или static, но не с другими спецификаторами области хранения. Когда используется с extern или static, __thread должен стоять непосредственно после других спецификаторов области хранения.

Спецификатор __thread может применяться к любым глобальным, статическим переменным на уровне файла, статическим переменным на уровне функции или статическим членам данных класса. Он не может применяться к автоматическим переменным на уровне блока или нестатическим членам данных.

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

Никакая статическая инициализация не может ссылаться на адрес переменной локального хранилища потока.

В C++, если для переменной локального хранилища потока указан инициализатор, он должен быть константным выражением, как определено в 5.19.2 стандарта ANSI/ISO C++.

См. Обработка TLS в ELF для подробного объяснения четырёх моделей адресации локального хранилища потоков и ожидаемого функционирования времени выполнения.

  • Изменения ISO/IEC 9899:1999 для локального хранилища потоков
  • Изменения ISO/IEC 14882:1998 для локального хранилища потоков

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/Thread_002dLocal.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API