локальное хранилище потока и переменные потока - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть несколько вопросов о TLS, и как он отличается от локальных переменных, глобальных переменных и локальных переменных.

  1. Локальные переменные потока доступны только для потока владельца, а локальные переменные доступны толькодля функции?
  2. где хранятся локальные переменные потока?
  3. когда мы захотим использовать локальные переменные потока?
  4. каково время жизни локальной переменной потока?
  5. является ли локальная переменная потока исключительной для потока?

в общем, я не могу понять разницу между локальной переменной и локальной переменной потока.

1 Ответ

0 голосов
/ 26 сентября 2018

Локальные переменные существуют в функции.Как только функция вернется, они исчезнут.Потоковые переменные существуют в потоке;как только нить выходит, они исчезают.С точки зрения срока службы можно сказать, что TLV эквивалентны локальным переменным функции запуска потока, за исключением того, что вам не нужно явно передавать ссылку на них в код ниже.

Обратите внимание, что естьдва способа использования TLV в родной программе Windows.Microsoft C ++ имеет модификатор __declspec(thread), а также семейство функций API Windows - TlsAlloc() и т. П.

  1. Другие потоки могут обращаться к локальным переменным потока, если указатель / ссылка каким-то образом переданыим.Однако методы доступа vanilla будут возвращать экземпляр текущего потока.

Если вы попытаетесь получить доступ к нему из другого потока после завершения создания потока, это неопределенное поведение.

Это деталь реализации.Но, скорее всего, в куче.

Хм, решать вам.Теоретически, почти все, что они обычно делают с TLV, можно обойтись и без ...

Пока поток работает.

Определить "эксклюзив".

...