线程数据共享:pthread_getspecific和pthread_setspecific
2013-12-09 14:59
489 查看
pthread_getpecific和pthread_setspecific提供了在同一个线程中不同函数间共享数据即线程存储的一种方法。具体用法为:
1.调用pthread_key_create()来创建一个类型为pthread_key_t类型的变量
该函数有两个参数,第一个参数就是声明的pthread_key_t变量,第二个参数是一个清理函数,用来在线程释放该线程存储的时候被调用。该函数指针可以设成NULL,这样系统将调用默认的清理函数。
2.调用pthread_setspcific()
当线程中需要存储特殊值的时候调用该函数,该函数有两个参数,第一个为前面声明的pthread_key_t变量,第二个为void*变量,用来存储任何类型的值。
3.如果需要取出所存储的值,调用pthread_getspecific()
该函数的参数为前面提到的pthread_key_t变量,该函数返回void*类型的值。
例子如下:
#gcc thread.c -o test -lpthread
#./test
1 is runing in thread_func
100 is runing in func1
2 is runing in thread_func
200 is runing in func1
1.调用pthread_key_create()来创建一个类型为pthread_key_t类型的变量
该函数有两个参数,第一个参数就是声明的pthread_key_t变量,第二个参数是一个清理函数,用来在线程释放该线程存储的时候被调用。该函数指针可以设成NULL,这样系统将调用默认的清理函数。
2.调用pthread_setspcific()
当线程中需要存储特殊值的时候调用该函数,该函数有两个参数,第一个为前面声明的pthread_key_t变量,第二个为void*变量,用来存储任何类型的值。
3.如果需要取出所存储的值,调用pthread_getspecific()
该函数的参数为前面提到的pthread_key_t变量,该函数返回void*类型的值。
例子如下:
#include<stdio.h> #include<pthread.h> #include<string.h> pthread_key_t p_key; void func1() { int *tmp = (int*)pthread_getspecific(p_key);//同一线程内的各个函数间共享数据。 printf("%d is runing in %s\n",*tmp,__func__); } void *thread_func(void *args) { pthread_setspecific(p_key,args); int *tmp = (int*)pthread_getspecific(p_key);//获得线程的私有空间 printf("%d is runing in %s\n",*tmp,__func__); *tmp = (*tmp)*100;//修改私有变量的值 func1(); return (void*)0; } int main() { pthread_t pa, pb; int a=1; int b=2; pthread_key_create(&p_key,NULL); pthread_create(&pa, NULL,thread_func,&a); pthread_create(&pb, NULL,thread_func,&b); pthread_join(pa, NULL); pthread_join(pb, NULL); return 0; }
#gcc thread.c -o test -lpthread
#./test
1 is runing in thread_func
100 is runing in func1
2 is runing in thread_func
200 is runing in func1
相关文章推荐
- pthread_getspecific()--读线程私有数据|pthread_setspecific()--写线程私有数据
- pthread_getspecific()--读线程私有数据|pthread_setspecific()--写线程私有数据
- pthread库中操作线程专有数据的函数:pthread_key_create,pthread_setspecific,pthread_gtespecific,pthread_key_delete
- pthread_getspecific()--读线程私有数据
- 线程之间共享数据(两个线程之间使用同一份数据),线程锁要统一,不统一的话会出现线程安全问题
- java中多个线程访问共享数据的方式有哪些
- java线程数据共享2
- 20160529_线程范围内数据共享
- 张孝祥实现线程范围内数据共享(学习笔记)
- 多个线程访问共享对象和数据的方式
- 详解 Qt 线程间共享数据
- pthread_once、pthread_key_create和pthread_getspecific和pthread_setspecific
- 一些关于线程用法的总结以及对上篇多线程同步、数据共享的补充
- Java中如何实现单个线程范围内的数据共享
- 详解 Qt 线程间共享数据
- 线程同步(信号量,互斥,条件变量) 分类: linux应用程序 2008-04-08 09:43 2587人阅读 评论(1) 收藏 举报 进行多线程编程,最头疼的就是那些共享的数据。因为你无法知道哪个线程会在哪个时候对它进行操作,你也无法
- 多线程07_张孝祥-多个线程之间共享数据的方式探讨
- ThreadLocal与Synchronized(线程安全与数据共享)
- 多个线程访问共享对象和数据的方式
- 黑马程序员-多个线程访问共享对象和数据