pthread中可以为每个线程设置私有变量.具体步骤如下:
1.声明私有变量. 如pthread_key_t pid_key.
2.为线程创建私有变量,如pthread_key_create(&pid_key,NULL);(在每个线程中调用)
3.为线程设置私有变量的值,如pthread_setspecific(pid_key, &tid);(在每个线程中调用)
4.获取线程对应的私有变量的值,如pthread_getspecific(pid_key);(在每个线程中调用).
代码示例如下:
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
static pthread_key_t pid_key;
void fun()
{
printf("private key=%d\n",*((int*)pthread_getspecific(pid_key)));
}
void*
child(void *arg)
{
// pthread_t tid = pthread_self();
int tid = (int)arg;
printf("pthread_self=%d\n",tid);
pthread_key_create(&pid_key, NULL);
pthread_setspecific(pid_key, &tid);
fun();
// printf("private key=%d\n",*((int*)pthread_getspecific(pid_key)));
}
int
main()
{
pthread_t tid1,tid2;
pthread_create(&tid1, NULL, child, (void*)1);
pthread_create(&tid2, NULL, child, (void*)2);
int tid =0;
pthread_key_create(&pid_key, NULL);
pthread_setspecific(pid_key, &tid);
fun();
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
}