имеется некая библиотека, в ней объявлена глобальная статическая переменная, хранящая код ошибки, возникшей при использовании одной из библиотечных функций. по аналогии с ф-ями, обрабатывающими errno, в данной библиотеки реализованы ф-ии возврата кода ошибки и соответствующего коду сообщения об ошибке.
функционал этой либы используется в мн-ве тредов. лочить мьютексами каждое изменение переменной, хранящей код ошибки, очень не хочется. также, на сколько я понял, мне не удасться создать pthread key для этой переменной извне, тк она статическая и прямой доступ к ней из сторонних функций не возможен. как варинт можно подправить саму библитеку и создать ключ на переменную внутри неё, но для этого нужно будет довольно серьёзно изменить саму структуру либы.
есть какие-нибудь идеи, как без непосредственной правки исходников библиотеки заставить каждый тред иметь собственную копию этой переменной?
thread specific data
Модератор: Модераторы разделов
-
Asgard
- Сообщения: 215
- Статус: North Valfader
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: thread specific data
Никак :-)
Переменная, принадлежащая потоку -- это только та, которая объявлена внутри функции, отвечающей за поток(короч, та, которая передана в pthread_create).
Переменная, принадлежащая потоку -- это только та, которая объявлена внутри функции, отвечающей за поток(короч, та, которая передана в pthread_create).
-
ety
- Сообщения: 358
- ОС: Linux
Re: thread specific data
переменная я думаю скомпилена в position independent code, посему теоритически реально хитрым образом произвести ее реаллокацию для каждого трида, на его tls, правда это извращение, к тому-же зависит от конкретной реализации, и придется ковырять символы в экзешнике.
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
-
Dragula
- Сообщения: 8
Re: thread specific data
Как вариант -- написать враппер на библиотеку, который будет сохранять значение переменной в 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!
Dead, I'm the dog, hound of hell you cry; devil on your back — I can never die!