pthread_getspecific()--读线程私有数据|pthread_setspecific()--写线程私有数据

原型:

#include <pthread.h>
void *pthread_getspecific(pthread_key_t key);
int pthread_setspecific(pthread_key_t key, const void *value);


说明:
TSD 的读写都通过上面两个专门的 Posix Thread 函数进行。

函数 pthread_setspecific() 将 pointer 的值 (不是锁指的内容) 与key 相关联。

函数 pthread_getspecific() 将与 key 相关联的数据读出来。返回的数据类型都是 void *,因此可以指向任何类型的数据。 

在多线程程序中,经常要用全局变量来实现多个函数间的数据共享。由于数据空间是共享的,因此全局变量也为所有进程共有。但有时应用程序设计中必要提供线程私有的全局变量,这个变量仅在线程中有效,但却可以跨过多个函数访问。

比如在程序里可能需要每个线程维护一个链表,而会使用相同的函数来操作这个链表,最简单的方法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由 Posix 线程库维护,成为线程私有数据 (Thread-specific Data,或称为 TSD)。 

 

posted on 2015-11-20 15:52  zyz913614263  阅读(1637)  评论(0编辑  收藏  举报

导航