Разница между "локальным хранилищем потока" и "хранилищем конкретного потока"
В чем разница между объявлением локальной переменной потока с использованием специального ключевого слова:
_Thread_local int var;
И используя конкретный tss_
набор функций:
tss_t key;
tss_create(&key, free);
tss_set(key, malloc(sizeof(int)));
int* pVar = tss_get(key);
Насколько я понимаю, _Thread_local
ключевое слово объявляет переменную с продолжительностью хранения потока, а tss_
набор функций возвращает ключ вызывающему потоку. Затем этот ключ можно использовать для доступа к некоторой глобальной памяти кучи, которая может быть выделена по мере необходимости, и этот указатель будет доступен только для этого потока, я прав?
1 ответ
Функционально важным отличием является создание деструктора. В вашем примере этоfree
, но на самом деле это может быть любая функция с правильной подписью.
Таким образом, это дает возможность обратного вызова в конце любого потока для выполнения любой очистки.