Как схема именуемой механизма именуемой механизма портативных потоков.
Вопрос
А. портативный Определение резьбы хранения Ссылка / идентичность Механизм, из которых Boost / Thread / TSSHPP является экземпляром, нужен способ создания уникальных ключей для себя. Этот ключ уникален в объеме потока и впоследствии используется для извлечения ссылок на объект объекта. Этот механизм используется в коде, написанном в нейтральном порядке.
Поскольку Boost - это портативный пример этой концепции, насколько конкретно работает такой механизм?
Решение
Поток Boost портативно к библиотеке резьбы Pthread (для UNIX) и Windows Win32 низкоуровневых API. Библиотека позволяет создавать ссылку, которая уникальна в каждом потоке выполнения. Глобальный C API errno
является представлен в качестве примера этой концепции в документации Boost.
Игнорируйте, если вы хотите - это просто след через исходный код, находящуюся функцию, представляющую интерес
Суть материи начинается в [boost]/boost/thread/tss.hpp
с get
функция thread_specific_ptr
и то reset
Функция - т. Е. Примещение и разрушение соответственно объекта, на который ссылаются. Примечание. Объект данных не помещен в ссылку на thread_specific_ptr
CTOR, или разрушенный ДТО. Вызов функции Get и Reset set_tss_data
и get_tss_data
. Отказ Сосредоточиться только на параметре на аспект функциональности, важный вызов функции, get_current_thread_data
, косневые через файл CPP [boost]/libs/thread/src/[libname]/thread.cpp
через цепочку вызовов функций. В get_current_thread_data
Есть функция вызова create_current_thread_tls_key
И это функция, которая создаст уникальный идентификатор для thread_specific_ptr
объект.
create_current_thread_tls_key
вызовы TlsAlloc()
на Win32 (связь) и pthread_key_create
для pthread (связь). Эти призывы убедитесь, что при инициализации PTR PTR принимает уникальный идентификатор, используемый в API-специфической способ для получения данных объекта. Определенные потокообразные API используют идентификатор потока (контекст, специфичный и разрешенный самим библиотекой) и идентификатор объекта, чтобы вернуть объект, специфичный в контекст определенного потока.