Если «данные потока», которые вы хотите изменить извне, имеют форму локальных переменных в функции, выполняющейся в потоке, или специфичных для потока данных, созданных с расширением __thread
, то только способ, которым вы можете изменить их извне (по модулю код с UB, который технически просто уничтожает память), - это заставить поток взять адреса своих переменных и сохранить его где-нибудь, где его смогут увидеть другие потоки (либо в глобальной переменной, либо вместоположение, переданное через аргумент void *
функции запуска потока.
Также обратите внимание, что, как было указано при повторном запуске, вы должны использовать некоторый метод синхронизации, если несколько потоков обращаются к одним и тем же данным. Единственный стандарт /Портативные методы синхронизации - pthread: pthread_mutex_lock
и т. д., но вы также можете использовать встроенные функции компиляции или компилятора (например, __sync_*
в gcc).