Разница между «локальным хранилищем потока» и «хранилищем, специфичным для потока» - PullRequest
3 голосов
/ 24 сентября 2019

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

_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 Ответ

2 голосов
/ 24 сентября 2019

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

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

...