Spec-Zone.ru › GCC 10

Следующая: Двоичные константы с префиксом ‘0b’, Предыдущая: Поля структур и объединений без имён, Вверх: Расширения семейства языков C [Оглавление][Индекс]

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

Локальное хранилище потоков (TLS) — это механизм, позволяющий выделять переменные таким образом, что для каждого существующего потока существует по одной копии переменной. Используемая GCC модель выполнения для реализации этого происходит от ABI процессора 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++.

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

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

Следующая: Двоичные константы с префиксом ‘0b’, Предыдущая: Поля структур и объединений без имён, Вверх: Расширения семейства языков C [Оглавление][Индекс]

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

Spec-Zone.ru

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