首页 > 代码库 > 线程变量

线程变量

pthread_getpecific和pthread_setspecific实现同一个线程中不同函数间共享数据的一种很好的方式。

#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 -lpthread  test.c -o test
# ./test

2 is runing in thread_func
1 is runing in thread_func
100 is runing in func1
200 is runing in func1

线程变量