Недавно я открыл для себя волшебство указателей на конкретные потоки boost. После некоторых исследований по безопасности потоков я хотел бы знать, как именно работают указатели для конкретных потоков. Однако я не могу найти это в документации. Может ли кто-нибудь дать некоторое представление об этом или какой-либо подробной документации?
Как работают указатели для конкретных потоков
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
Я понимаю. Я пытался выяснить, как эта реализация выглядит под капотом.
- person joshu; 20.08.2015