“线程本地存储”和“线程特定存储”之间的区别

时间:2019-09-24 19:45:42

标签: c c11 thread-local-storage thread-specific-storage

使用专用关键字声明线程局部变量有什么区别:

_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 个答案:

答案 0 :(得分:2)

在功能上,重要的区别是析构函数的建立。在您的示例中,这是free,但实际上它可以是具有正确签名的任何函数。

因此,这提供了在任何线程结束时进行任何清理的回调的可能性。