线程私有数据的原理主要是用公共的键(key)关联不同线程的私有数据。
今天总结一下线程私有数据的编程的大致过程。下面
#include<pthread.h> //1.定义全局静态变量key static pthread_key_t key; //2. 定义变量once,初始化PTHREAD_ONCE_INIT static pthread_once_t once = PTHREAD_ONCE_INIT; //3. 定义析构函数 static void destructor(void *value) { //析构函数用于处理线程退出时的清理操作 } //4. static void init_routine() { pthread_key_create(&key, destructor); } void *thr_fun(void *arg) { //5. 定义私有数据 char test[4096]; //6. 定义键 pthread_once(&once, init_routine); //7. 测试是否私有数据是否有分配内存 if ( pthread_getspecific(key) == NULL) test = (cahr*)malloc(sizeof(4096)); //8. 绑定键和TSD pthread_setspecific(key, test); } int main() { pthread_t tid; pthread_create(&tid, NULL, thr_fun, NULL); pthread_join(tid, NULL); }