当前位置: 技术问答>linux和unix
关于线程私有数据
来源: 互联网 发布时间:2015-11-16
本文导语: #include #include pthread_key_t key; void echomsg(int t) { printf("destructor excuted in thread %d, param=%dn", pthread_self(),t); } void* child1(void* arg) { int tid=pthread_self(); printf("thread %d entern", tid); sleep(2); printf("thread %d returns %dn", ...
#include
#include
pthread_key_t key;
void echomsg(int t)
{
printf("destructor excuted in thread %d, param=%dn", pthread_self(),t);
}
void* child1(void* arg)
{
int tid=pthread_self();
printf("thread %d entern", tid);
sleep(2);
printf("thread %d returns %dn", tid, pthread_getspecific(key));
sleep(5);
pthread_exit(0);
}
void* child2(void* arg)
{
int tid=pthread_self();
printf("thread %d entern", tid);
sleep(1);
printf("thread %d returns %dn", tid, pthread_getspecific(key));
sleep(5);
pthread_exit(0);
}
int main(int argc, char** argv)
{
pthread_t tid1,tid2;
printf("hellon");
pthread_key_create(&key, (void*)echomsg);
pthread_create(&tid1, NULL, child1, NULL);
pthread_create(&tid2, NULL, child2, NULL);
sleep(10);
pthread_key_delete(key);
printf("main thread exitn");
pthread_exit(0);
}
child1和child2的作用是先用set函数将tid的值给key
再printf中调用 getkey.但是打印出的结果却是0,我的程序哪有问题?
还有网上说:
int pthread_key_create(pthread_key_t *key, void (*destr_function) (void *))
该函数从TSD池中分配一项,将其值赋给key供以后访问使用。如果destr_function不为空,在线程退出(pthread_exit())时将以key所关联的数据为参数调用destr_function(),以释放分配的缓冲区。
可我用pthread_exit推出,系统并没有调用echamsg,这是为什么?
#include
pthread_key_t key;
void echomsg(int t)
{
printf("destructor excuted in thread %d, param=%dn", pthread_self(),t);
}
void* child1(void* arg)
{
int tid=pthread_self();
printf("thread %d entern", tid);
sleep(2);
printf("thread %d returns %dn", tid, pthread_getspecific(key));
sleep(5);
pthread_exit(0);
}
void* child2(void* arg)
{
int tid=pthread_self();
printf("thread %d entern", tid);
sleep(1);
printf("thread %d returns %dn", tid, pthread_getspecific(key));
sleep(5);
pthread_exit(0);
}
int main(int argc, char** argv)
{
pthread_t tid1,tid2;
printf("hellon");
pthread_key_create(&key, (void*)echomsg);
pthread_create(&tid1, NULL, child1, NULL);
pthread_create(&tid2, NULL, child2, NULL);
sleep(10);
pthread_key_delete(key);
printf("main thread exitn");
pthread_exit(0);
}
child1和child2的作用是先用set函数将tid的值给key
再printf中调用 getkey.但是打印出的结果却是0,我的程序哪有问题?
还有网上说:
int pthread_key_create(pthread_key_t *key, void (*destr_function) (void *))
该函数从TSD池中分配一项,将其值赋给key供以后访问使用。如果destr_function不为空,在线程退出(pthread_exit())时将以key所关联的数据为参数调用destr_function(),以释放分配的缓冲区。
可我用pthread_exit推出,系统并没有调用echamsg,这是为什么?
|
没有用pthread_setspecific设置值,当然没有了。