一个关于多线程对象释放的问题
2014-09-04 09:30
225 查看
最近做一个项目,碰到一个对象释放问题:
模型是这样的,多个线程操作一个对象,对象提供出来的接口是线程安全的,然后多个线程将对象加到线程池队列中等待执行,
然后问题就出来了,代码如下。
IStream就是那个对象,当别的线程进行删除操作时,怎么保证这个对象可以安全删除,也就是这个对象没有别的线程在引用了。
智能指针似乎可以解决这个问题,除了智能指针,
有人说com技术的引用计数器,那个操作起来比较复杂,计数器需加锁,
会导致程序的架构有点改动,还有别的方法吗?
模型是这样的,多个线程操作一个对象,对象提供出来的接口是线程安全的,然后多个线程将对象加到线程池队列中等待执行,
然后问题就出来了,代码如下。
while(t->m_running){ if(__SEMTAKE(j->m_semaphoreQue, 500)){ continue; } if(!t->m_running){ break; } IStream * s = NULL; { __LOCK(j->m_mutexQue); if(!j->m_queTask.empty()){ s = j->m_queTask.front(); j->m_queTask.pop_front(); } } if(s){ (s)->TransferStream(); } }
IStream就是那个对象,当别的线程进行删除操作时,怎么保证这个对象可以安全删除,也就是这个对象没有别的线程在引用了。
智能指针似乎可以解决这个问题,除了智能指针,
有人说com技术的引用计数器,那个操作起来比较复杂,计数器需加锁,
会导致程序的架构有点改动,还有别的方法吗?
相关文章推荐
- 关于对象在函数中delete的一个问题
- 关于“必须至少有一个对象实现 IComparable。”问题的另一中错误 解法
- 多线程用同一个dao对象就会存在多个线程执行同一方法,为什么不用考虑线程安全问题
- 关于Objective-C 对象release操作的一个小问题探讨
- 关于unity动态添加游戏对象问题,如何动态添加一个菜单【三】
- stackoverflow上的一个关于传递类对象的问题
- 关于Objective-C 对象release操作的一个小问题探讨
- 关于GDI资源使用后未释放,导致GDI对象猛增,程序花屏,异常退出的问题
- 单例模式,多线程同时访问一个实例对象问题的处理,加lock .
- 如果new 一个对象,用free去释放,会有什么问题?
- 答疑一个哥们的多线程问题关于 start()和run()
- 关于form使用form.submit()提交的一个问题,提示form.submit不是对象的方法属性
- 关于Objective-C 对象release操作的一个小问题探讨
- 关于unity动态添加游戏对象问题,如何动态添加一个菜单【一】
- 关于Objective-C 对象release操作的一个小问题探讨
- 终于发现自己存在的一个问题:关于用不用VC创建对象的问题
- 今天碰到的一个问题,关于通过基类对象的引用给子类赋值
- 今天遇到一个关于对象和对象方法内存分配的有趣的问题
- 关于hibernate用save方法保存对象所遇到的一个问题
- 关于unity动态添加游戏对象问题,如何动态添加一个菜单【二】