【发布时间】:2013-09-26 16:03:48
【问题描述】:
我目前遇到的问题是必须释放一个经常被两个不同线程访问的对象(实例)。对我来说,两个线程中的哪一个正在破坏实例并不重要,但我更喜欢那个也创建它的线程,尽管我认为这根本不重要。
所以在一个场景中,应该销毁对象的线程检测到它应该被删除,并且在调用析构函数时,另一个线程正在访问该对象的成员(函数),可能是某种运行时会发生错误。
我对此主题进行了一些研究,但我只能弄清楚人们说:“为什么要删除仍然需要存在的对象”。但在我的情况下,在一个线程正在执行的一段代码决定销毁它之后,它应该不再需要了。
我会很感激您的回答,例如对涵盖此主题的好书或文章的提示,但请随时写下您将如何解决此问题。
【问题讨论】:
-
删除与任何其他同步问题没有任何不同。使用互斥锁或其他东西。
-
不使用smart pointers?
-
等到两个线程都完成了吗?
-
使用引用计数的智能指针来保存对对象的引用。我建议 shared_ptr,至少 Boost 是线程安全的。
-
@UlrichEckhardt
std::shared_ptr(C++11) 也是线程安全的。
标签: c++ multithreading simultaneous ownership destruction