thread specific data

Модератор: Модераторы разделов

Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

thread specific data

Сообщение Asgard »

имеется некая библиотека, в ней объявлена глобальная статическая переменная, хранящая код ошибки, возникшей при использовании одной из библиотечных функций. по аналогии с ф-ями, обрабатывающими errno, в данной библиотеки реализованы ф-ии возврата кода ошибки и соответствующего коду сообщения об ошибке.

функционал этой либы используется в мн-ве тредов. лочить мьютексами каждое изменение переменной, хранящей код ошибки, очень не хочется. также, на сколько я понял, мне не удасться создать pthread key для этой переменной извне, тк она статическая и прямой доступ к ней из сторонних функций не возможен. как варинт можно подправить саму библитеку и создать ключ на переменную внутри неё, но для этого нужно будет довольно серьёзно изменить саму структуру либы.

есть какие-нибудь идеи, как без непосредственной правки исходников библиотеки заставить каждый тред иметь собственную копию этой переменной?
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: thread specific data

Сообщение KiWi »

Никак :-)
Переменная, принадлежащая потоку -- это только та, которая объявлена внутри функции, отвечающей за поток(короч, та, которая передана в pthread_create).
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: thread specific data

Сообщение ety »

переменная я думаю скомпилена в position independent code, посему теоритически реально хитрым образом произвести ее реаллокацию для каждого трида, на его tls, правда это извращение, к тому-же зависит от конкретной реализации, и придется ковырять символы в экзешнике.
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
Аватара пользователя
Dragula
Сообщения: 8

Re: thread specific data

Сообщение Dragula »

Как вариант -- написать враппер на библиотеку, который будет сохранять значение переменной в TLS после вызова функции. Syntactic Sugar эдакий.
Dead, I'm the life, diggin' to the skin; knuckle crack the bone, 21 to win.
Dead, I'm the dog, hound of hell you cry; devil on your back — I can never die!
Спасибо сказали: