ta 呢? 1. 用来实现 errno
---------------------------------
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void mydtor(void *data)
{
printf("dtor = %p\n", data);
free(data);
}
void *mythr1(void *arg)
{
char *data = malloc(10);
pthread_key_t key = (pthread_key_t) arg;
printf("thr #1 data1 = %p\n", data);
pthread_setspecific(key, data);
sleep(1);
data = pthread_getspecific(key);
printf("thr #1 data2 = %p\n", data);
return (void *)0;
}
void *mythr2(void *arg)
{
char *data = malloc(10);
pthread_key_t key = (pthread_key_t) arg;
sleep(1);
printf("thr #2 data1 = %p\n", data);
pthread_setspecific(key, data);
data = pthread_getspecific(key);
printf("thr #2 data2 = %p\n", data);
return (void *)0;
}
int main()
{
pthread_t pid1, pid2;
pthread_key_t key;
pthread_key_create(&key, mydtor);
pthread_create(&pid1, NULL, mythr1, (void *)key);
pthread_create(&pid2, NULL, mythr2, (void *)key);
pthread_join(pid1, NULL);
pthread_join(pid2, NULL);
pthread_key_delete(key);
return 0;
}
---------------------------------
$ ./a.out
thr #1 data1 = 0x804c3f0
thr #2 data1 = 0x804c400
thr #2 data2 = 0x804c400
dtor = 0x804c400
thr #1 data2 = 0x804c3f0
dtor = 0x804c3f0
---------------------------------
评论