Spec-Zone.ru › GCC 12

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++.

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

• C99 Изменения в локальном хранилище потоков:
• C++98 Изменения в локальном хранилище потоков:

Далее: Бинарные константы, Предыдущее: Неименованные поля, Вверх: Расширения C [Содержание][Индекс]

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

Spec-Zone.ru

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