实践主义者,多行路远胜于多读书。
全部博文(32)
分类: C/C++
2008-03-25 17:16:23
|
|
|
chinaunix网友2010-06-19 02:36:35
""" void* fun2(void* p) { /* 转呀转就把原类型转回来了. */ boost::shared_ptr pb = *(boost::shared_ptr*)(p); pb->out(); sleep(10); // 注意在这里就不再需要delete } """ 博主,上面的这个函数是有问题的;我猜测您的意思是想为每个执行的线程函数持有一个类型B的ownership(即指向B类型的boost::shared_ptr),但要做到线程安全必须满足一个前提:保证在进入线程函数前完成boost::shared_ptr引用计数的自增;您这里是把boost::shared_ptr的指针传进线程函数,而boost::shared_ptr却还未进行任何关于ownership语义的操作。 以下是一种会出现问题的步骤: 1.线程a以B对象的指针构造boost::shared_ptr,获得B的ownership,B的引用计数变为1 2.线程a启动线程b,并把B的指针传