Windows поддерживает локальное хранилище потоков (TLS) в DLL.Это может быть очень практичным, если вы хотите иметь несколько блоков памяти на поток с уникальным значением (уникальным для потока).Внутри любой другой функции из DLL вы можете очень просто получить значение, соответствующее текущему потоку .Это очень полезно в некоторых сценариях.Посмотрите здесь для получения более подробной информации.
Я сам не пользуюсь pthreads
, но я полагаю, что слот для каждого потока введен, чтобы сделать работу с TLS более комфортной.
ОБНОВЛЕНО : Из вашего комментария я вижу, что вы неправильно поняли мой ответ.Я не разработчик POSIX, я занимаюсь разработкой только для Win32, и ваш вопрос касается возможностей WIn32 API распределения и освобождения для каждого потока.Я пытаюсь объяснить возможности, и вы сами можете решить, какой из них лучше для ваших конкретных сценариев.
Эквивалент pthread_XXX
функций в Win32 следующие:
I not рекомендовал использовать конструкцию __ declspec (thread) , что более характерно для компилятора.
Пример Использование локального хранилища потоков показывает, как использовать локальное хранилище потоков (TLS) без DLL, но яЛично мне нравится и используется TLS только в DLL.
Параметр destructor функции pthread_key_create не имеет аналогов в Win32, но я не вижу здесь никаких проблем.Все компиляторы C / C ++ поддерживают __try {/**/} __finally {/**/}
конструкцию Структурированной обработки исключений , так что вы можете использовать ее в теле своей функции потока и реализовать таким образом, как Очистка ресурсов точно так же, какВы можете сделать это в главном потоке.
Мне жаль, что вы не включили в свой вопрос пример, который показывает, как вы обычно используете деструктор функции pthread_key_create ,Я считаю, что примеры могут прояснить многое без большого количества слов.Поэтому, если мой ответ не поможет вам, мы можем лучше объяснить все в примерах: вы напишите пример и, возможно, краткий комментарий о том, что он должен делать, и я мог бы написать тот же код, используя Win32 API, только на C или C ++.