Разница между "локальным хранилищем потока" и "хранилищем конкретного потока"

В чем разница между объявлением локальной переменной потока с использованием специального ключевого слова:

_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, но на самом деле это может быть любая функция с правильной подписью.

Таким образом, это дает возможность обратного вызова в конце любого потока для выполнения любой очистки.

Другие вопросы по тегам