我有一个线程A,用于分配内存并将其分配给共享指针。然后,该线程产生其他3个线程X,Y和Z,并将共享指针的拷贝传递给每个线程。当X,Y和Z超出范围时,将释放内存。但是有可能两个线程X,Y在完全相同的时间点超出范围,并且引用计数存在竞争条件,因此与其递减2,它仅递减一次。因此,现在新的引用计数下降到0,因此存在内存泄漏。请注意,X,Y和Z仅读取内存。不写入或重置共享指针。长话短说,引用计数上是否存在竞争条件,这会导致内存泄漏吗?
最佳答案
其他几个人已经提供了指向文档的链接,以解释这是安全的。
有关绝对不可辩驳的证明,请参阅Boost Smartptr如何实际上在boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp
(或您平台的相应文件)中从头开始实现自己的互斥体。
关于c++ - boost 共享指针: Simultaneous Read Access Across Multiple Threads,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2687017/