Данные, специфичные для потока, против локального хранилища потока

Я читал КеррискаИнтерфейс программирования Linux: Руководство по системному программированию Linux и UNIXГлава 31 по теме. В эту главу включены данные, относящиеся к потокам (раздел 31.3.4) и локальное хранилище потоков (раздел 31.4). Темы были освещены на страницах 663-669.

Данные, специфичные для потока (pthread_key_create, pthread_setspecific, pthread_getspecific, и друзья) выглядит более мощным, но, кажется, немного более громоздким в использовании, и, кажется, чаще использует диспетчер памяти.

Нить локального хранилища (__thread в статических и глобальных объявлениях) выглядит немного менее мощным, так как он ограничен временем компиляции, но, похоже, его проще использовать, и он кажется недоступным для менеджера памяти во время выполнения.

Я могу ошибаться насчет менеджера памяти времени выполнения, так как может быть код за кулисами, который вызываетpthread_key_create когда он сталкивается__thread переменные.

Керриск не предложил сравнение / контраст двух стратегий, и он не дал рекомендации о том, когда использовать какой из них в данной ситуации.

Чтобы добавить контекст к вопросу: я оцениваю стороннюю библиотеку. Библиотека использует глобалы, делаетне использовать блокировку, и я хочу использовать ее в многопоточной программе. Программа использует многопоточность для минимизации сетевых задержек.

Есть ли победитель? Или есть разные сценарии, которые оправдывают использование одного или другого?

Ответы на вопрос(2)

Ваш ответ на вопрос