Как схема именуемой механизма именуемой механизма портативных потоков.

StackOverflow https://stackoverflow.com/questions/2628418

Вопрос

А. портативный Определение резьбы хранения Ссылка / идентичность Механизм, из которых 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_ptrCTOR, или разрушенный ДТО. Вызов функции 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 используют идентификатор потока (контекст, специфичный и разрешенный самим библиотекой) и идентификатор объекта, чтобы вернуть объект, специфичный в контекст определенного потока.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top