Данные, специфичные для потока, против локального хранилища потока
Я читал КеррискаИнтерфейс программирования Linux: Руководство по системному программированию Linux и UNIXГлава 31 по теме. В эту главу включены данные, относящиеся к потокам (раздел 31.3.4) и локальное хранилище потоков (раздел 31.4). Темы были освещены на страницах 663-669.
Данные, специфичные для потока (pthread_key_create
, pthread_setspecific
, pthread_getspecific
, и друзья) выглядит более мощным, но, кажется, немного более громоздким в использовании, и, кажется, чаще использует диспетчер памяти.
Нить локального хранилища (__thread
в статических и глобальных объявлениях) выглядит немного менее мощным, так как он ограничен временем компиляции, но, похоже, его проще использовать, и он кажется недоступным для менеджера памяти во время выполнения.
Я могу ошибаться насчет менеджера памяти времени выполнения, так как может быть код за кулисами, который вызываетpthread_key_create
когда он сталкивается__thread
переменные.
Керриск не предложил сравнение / контраст двух стратегий, и он не дал рекомендации о том, когда использовать какой из них в данной ситуации.
Чтобы добавить контекст к вопросу: я оцениваю стороннюю библиотеку. Библиотека использует глобалы, делаетне использовать блокировку, и я хочу использовать ее в многопоточной программе. Программа использует многопоточность для минимизации сетевых задержек.
Есть ли победитель? Или есть разные сценарии, которые оправдывают использование одного или другого?