#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
Комментариев нет:
Отправить комментарий