ChinaUnix.net
相关文章推荐:

线程私有数据

APUE2中在解释为什么需要线程私有数据的原因时,讲到其中的一个原因如下: 有时候需要维护基于每个线程数据,用线程ID作为索引。因为线程ID不能保证是小而连续的整数,所以不能简单的分配一个线程数据数组,用线程 ID作为数组的索引。即使线程ID确实是小而连续的整数,可能还希望有一些额外的保护,以防止某个线程数据和其它线程数据相混淆。 能不能解释下这条原因,我看不明白这和线程私有数据有什么关系啊?

by xiaozhu2007 - C/C++ - 2008-05-03 23:14:05 阅读(1651) 回复(3)

相关讨论

[code]#include #include pthread_key_t key; void echomsg(int t) { printf("destructor excuted in thread %d,param=%d\n",pthread_self(),t); } void * child1(void *arg) { int tid=pthread_self(); printf("thread %d enter\n",tid); pthread_setspecific(key,(void *)tid); sleep(2); printf("thread %d returns %d\n",tid,pthread_getspecific...

by huhui_21cn - C/C++ - 2007-03-12 16:56:58 阅读(1133) 回复(3)

1.谁能帮我解释一下线程私有数据的作用,在什么情况下必须使用线程私有数据才能解决问题? 2.pthread_key_create(pthread_key_t * key,void(destructor)(void*))中第二个参数为空时,系统是不是会调用自己的析构函数来释放内存?如果不为空,应如何实现这个函数才能实现释放内存的作用? 3.书上说在非正常退出线程时,不会调用析构函数,就意味着内存泄漏,有什么办法可以解决?

by wangxiaoguang - C/C++ - 2008-09-02 10:25:37 阅读(2551) 回复(6)

有关线程私有数据的资料,其中有一例程如下] 执行后大部分都对,但未打印出 echomsg函数的语句 destructor execute in thread xxxx ,param=xxxx 向不通,请帮忙看一下 #include ; #include ; pthread_key_t key; void echomsg(int t) { printf("destructor excuted in thread %d,param=%d\n",pthread_self(),t); } void * child1(void *arg) { int tid=pthread_self(); print...

by jiutiao2004 - C/C++ - 2004-05-17 09:16:31 阅读(768) 回复(1)

在UNIX环境高级编程12.6节里边: 例子程序将malloc分配的变量设置为线程私有数据。我想,既然malloc 有自己的锁,是线程安全的,何必还用 pthread_setspecific()把它设置成线程私有的呢?每个线程调用这个函数肯定会得到属于该线程自己的一份内存,对吗? 例子程序如下: Figure 12.13. A thread-safe, compatible version of getenv [code] #include #include #include #include

by wliang511 - C/C++ - 2008-05-30 09:11:28 阅读(1560) 回复(2)

感觉好像thread私有数据没有什么作用,因为它的功能可以完全用函数参数的形式来取缔 大家的看法呢?

by chenzhanyiczy - C/C++ - 2008-08-13 21:08:11 阅读(4067) 回复(20)

有别人的一个源代码,其中用了一些全局变量。 现在我想把它改成线程安全的。大家给个思路, 是不是必须用pthread_key_t相关函数? 谢谢

by jeffwang8001 - C/C++ - 2005-09-20 21:17:30 阅读(746) 回复(1)

比如说有同一个类class aaa的两个不同对象:lu1, lu2。 那么lu1的成员函数能不能访问lu2的私有数据成员呢? 我有一个简单的小程序:#include ; class aaa { int a; int b; public: void jia(aaa fu) { fu.a=fu.a+10; } void show() { cout<<'\n'<

by studyboyz - C/C++ - 2003-10-28 16:12:34 阅读(5268) 回复(6)

AIX5.2 原来rootvg有两块盘,hdisk0和hdisk1 重新安装系统,rootvg只用到一块硬盘hdisk0,应该没有毁掉hdisk1的数据,手工把hdisk1强行加入到rootvg,但不知道怎么做才能看到hdisk1的数据,哪位大哥能帮帮忙,万分感谢!!!

by lyp1012 - AIX - 2007-12-06 18:48:06 阅读(1826) 回复(3)

为什么,我去年发的很多帖子找不到了

by 北京野狼 - 站务交流 - 2005-04-24 22:59:30 阅读(1073) 回复(2)

sybase 11.9.2 for unixware需要更换硬盘,如何备份才能保证用户数据和系统参数的完整,

by mengfg - Sybase - 2003-10-14 15:41:48 阅读(722) 回复(1)