Зачем нам нужен boost :: thread_specific_ptr? - PullRequest
3 голосов
/ 08 июля 2011

Зачем нам нужен boost :: thread_specific_ptr, или другими словами, что мы не можем легко сделать без него?

Я могу понять, почему pthread предоставляет pthread_getspecific () и т. Д. Эти функции полезны для очистки после мертвых потоков и удобны для вызова из функций в стиле C (очевидная альтернатива - передавать указатель везде, который указывает нанекоторая память была выделена до создания потока).

Напротив, конструктор boost: thread принимает вызываемый класс по значению, и все нестатичные в этом классе становятся локальными в потоке после его копирования.Я не могу понять, почему я хотел бы использовать boost :: thread_specific_ptr вместо предпочтения члена класса больше, чем я хотел бы использовать глобальную переменную в коде ООП.

Ужасно ли я что-то неправильно понимаю?Очень краткий пример поможет, пожалуйста.Большое спасибо.

1 Ответ

2 голосов
/ 08 июля 2011

thread_specific_ptr просто обеспечивает портативный локальный доступ к данным потока. Вам не нужно управлять своими потоками с помощью Boost.Thread, чтобы получить из этого значение. Канонический пример - тот, который приведен в документации Boost для этого класса:

Одним из примеров является переменная C errno, используется для хранения кода ошибки связанные с функциями из стандарта С библиотека. Это обычная практика (и требуется POSIX) для компиляторов, которые поддержка многопоточных приложений для предоставить отдельный экземпляр errno для каждого потока, чтобы избежать разные темы, конкурирующие за чтение или обновить значение.

...