#linux #c #pthread
В коде имеются несколько переменных типа static __thread.
Если ядро переключает контекст потока, то проблем не наблюдается.
Если самостоятельно переключить контекст потока 1, на поток 2, то поток 2 будет видеть
локальные переменные потока 1, что меня совсем не устраивает.
К сожалению, я не обнаружил стандартных средств быстро переключаться между потоками,
а механизмы сопрограмм ничего не знают про переменные __thread.
Отсюда вопрос, можно ли и как переключать контекст переменных типа __thread?
PS: Если что-то не понятно, спрашивайте, уточню. Вопросы типа: зачем/почему - игнорируются,
кому кто не нравится - отвечать не заставляю.
Ответы
Ответ 1
Вот тут, кажется, все подробно расписано: https://www.akkadia.org/drepper/tls.pdf Вкратце: на архитектуре x86-64 переменные TLS хранятся в сегменте FS. При этом там есть определенная структура данных, которая позволяет, в том числе, получить адреса этих же переменных в сегменте DS (чтобы можно было получить на них указатель). Заголовок этой структуры хранится по адресу FS:0. Дальше разбирайтесь сами :) PS а в Windows для x64 эта структура находится по адресу GS:0
Комментариев нет:
Отправить комментарий