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