一. 概念及作用
在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线程存储的意义。这样的数据结构可以由Posix线程库维护,称为线程私有数据(Thread-specific Data,或TSD)。
具体用法如下:
1.创建一个类型为pthread_key_t类型的变量。
2.调用pthread_key_create()来创建该变量。该函数有两个参数,第一个参数就是上面声明的pthread_key_t变量,第二个参数是一个清理函数,用来在线程释放该线程存储的时候被调用。该函数指针可以设成NULL,这样系统将调用默认的清理函数。
3.当线程中需要存储特殊值的时候,可以调用pthread_setspcific()。该函数有两个参数,第一个为前面声明的pthread_key_t变量,第二个为

本文介绍了Linux环境下,C语言如何利用Posix线程库创建和使用线程私有数据(Thread-specific Data,TSD)。通过线程存储,每个线程可以拥有独立的全局变量副本,避免了多线程数据共享的问题。文中详细讲解了创建、注销TSD的API以及访问数据的函数,并提供了一个实例展示了如何存储线程私有数据。
最低0.47元/天 解锁文章
10万+

被折叠的 条评论
为什么被折叠?



