Как я могу прочитать/написать локальную переменную потока из другого потока? То есть, в Thread A я хотел бы получить доступ к переменной в области локального хранилища нитей Thread B. Я знаю идентификатор другого потока.
Переменная объявляется как __thread
в GCC. Целевая платформа - это Linux, но независимость может быть приятной (особенно для GCC).
Отсутствие крюка запуска нити не может просто отслеживать это значение в начале каждого потока. Все потоки должны отслеживаться таким образом (а не только специально запущенные).
Обертка более высокого уровня, такая как boost thread_local_storage или использование ключей pthread, не является опцией. Мне требуется производительность при использовании локальной переменной __thread
.
ПЕРВЫЙ ОТВЕТ НЕПРАВИЛЬНО: нельзя использовать глобальные переменные для того, что я хочу делать. Каждый поток должен иметь свою собственную копию переменной. Кроме того, эти переменные должны быть __thread
переменными по соображениям производительности (одинаково эффективное решение также будет в порядке, но я не знаю). Я также не контролирую точки ввода потока, поэтому нет возможности для этих потоков регистрировать любую структуру.
Thread Local не является приватным: другое недоразумение в отношении локальных переменных. Это никоим образом не какая-то частная переменная для потока. Они являются глобально адресуемой памятью, с ограничением, что их время жизни привязано к потоку. Любая функция из любого потока, если указана указатель на эти переменные, может их модифицировать. Вышеупомянутый вопрос касается, по сути, того, как получить этот адрес указателя.