Spec-Zone.ru › GCC 14

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

Локальное хранилище потоков (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 Handling For Thread-Local Storage для подробного объяснения четырёх моделей адресации локального хранилища потоков и ожидаемого функционирования модели выполнения.

  • Редакции 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-14.2.0/gcc/Thread_002dLocal.html

Spec-Zone.ru

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