Spec-Zone.ru › GCC 7

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

• C99 Редактирование локального хранилища потоков:
• C++98 Редактирование локального хранилища потоков:

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

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

Spec-Zone.ru

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