Spec-Zone.ru › GCC 11

Следующее: Бинарные константы с префиксом ‘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++.

См. Обработка TLS в 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-11.4.0/gcc/Thread-Local.html

Spec-Zone.ru

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