每个线程都有自己的专有数据,私有数据采用的是公有键私有值的存储方式,通过键来访问值的方式访问数据。以线程看来,访问就是使用公有键指代线程数据;貌似对键的取值和对变量的访问是一样的。其实,公有键的私有值的访问方式和面向对象中的多态很相似,不同线程中,同样的键实际指向的是不同的内存内容。
一、操作线程私有数据的函数
1、pthread_key_create()用于创建一个键;
2、pthread_setspecific()将私有数据存储进与键值对应的位置
3、pthread_getspecific()将私有数据从存储位置去除
4、pthread_key_delete()用于删除键
二、代码test7_9.c
1 //This is c program code! 2 /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 3 * 文档信息: *** :~/test7_9.c 4 * 版权声明: *** :(魎魍魅魑)MIT 5 * 联络信箱: *** :guochaoxxl@163.com 6 * 创建时间: *** :2020年11月18日的上午09:17 7 * 文档用途: *** :数据结构与算法分析-c语言描述 8 * 作者信息: *** :guochaoxxl(http://cnblogs.com/guochaoxxl) 9 * 修订时间: *** :2020年第46周 11月18日 星期三 上午09:17 (第323天) 10 * 文件描述: *** :自行添加 11 * *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/ 12 #include <pthread.h> 13 #include <stdio.h> 14 #include <stdlib.h> 15 #include <unistd.h> 16 17 typedef struct _data{ 18 int x; 19 char c[4]; 20 } Data; 21 22 pthread_t pthreadA; 23 pthread_t pthreadB; 24 pthread_key_t dataKey;//每个进程创建一次,不同的线程,同样名字的键指向不同的地方 25 26 void *cleanup_myData(void *dataptr){//删除键时调用的 27 free((Data*)dataptr); 28 } 29 30 void anum1(){ 31 int rc; 32 Data *mdata=(Data*)malloc(sizeof(Data)); 33 mdata->x=1; 34 mdata->c[0]='a'; 35 mdata->c[1]='