Spec-Zone.ru › GCC 4

6.61 Хранение данных, локальное для потока

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

  • C99 Редактирование данных, локальных для потока
  • C++98 Редактирование данных, локальных для потока

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

Spec-Zone.ru

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