Как работают указатели для конкретных потоков

Недавно я открыл для себя волшебство указателей на конкретные потоки boost. После некоторых исследований по безопасности потоков я хотел бы знать, как именно работают указатели для конкретных потоков. Однако я не могу найти это в документации. Может ли кто-нибудь дать некоторое представление об этом или какой-либо подробной документации?


person joshu    schedule 20.08.2015    source источник
comment
Скорее всего, они реализованы с использованием API локального хранилища потоков хост-ОС: en.wikipedia.org/ wiki/Thread-local_storage   -  person Jeremy Friesner    schedule 20.08.2015
comment
В этом вопросе много полезной информации: stackoverflow.com/questions/12878698/   -  person Alan Stokes    schedule 20.08.2015
comment
См. ключевое слово C++11 thread_local   -  person moala    schedule 12.01.2018


Ответы (1)


Из документов Boost в локальном хранилище потока:

boost::thread_specific_ptr предоставляет переносимый механизм локального хранилища потока, который работает на всех компиляторах, поддерживаемых Boost.Thread. Каждый экземпляр boost::thread_specific_ptr представляет собой указатель на объект (такой как errno), где каждый поток должен иметь отдельное значение. Значение для текущего потока можно получить с помощью функции-члена get() или с помощью операторов привязки указателя * и ->. Первоначально указатель имеет значение NULL в каждом потоке, но значение для текущего потока можно установить с помощью функции-члена reset().

И вы можете найти исходный код Boost здесь.

person Buddy    schedule 20.08.2015
comment
Я понимаю. Я пытался выяснить, как эта реализация выглядит под капотом. - person joshu; 20.08.2015