概述我有一个
线程A,它分配内存并将其分配给共享
指针.然后,该线程产生3个其他线程X,Y和Z,并将共享指针的副本传递给每个线程.当X,Y和Z超出范围时,释放内存.但是有可能2个线程X,Y在完全相同的时间点超出范围并且在引用计数上存在竞争条件,因此不是将其递减2,而是仅递减一次.所以,现在引用计数更新为0,因此存在内存泄漏.请注意,X,Y和Z仅
读取内存.不写入或重置共享指针.长话短说,引用计数是否存在竞争 我有一个线程A,它分配内存并将其分配给共享指针.然后,该线程产生3个其他线程X,Y和Z,并将共享指针的副本传递给每个线程.当X,Y和Z超出范围时,释放内存.但是有可能2个线程X,Y在完全相同的时间点超出范围并且在引用计数上存在竞争条件,因此不是将其递减2,而是仅递减一次.所以,现在引用计数更新为0,因此存在内存泄漏.请注意,X,Y和Z仅读取内存.不写入或重置共享指针.长话短说,引用计数是否存在竞争条件,是否会导致内存泄漏?解决方法 其他几个人已经提供了文件的链接,说明这是安全的.
有关绝对无可辩驳的证据,请参阅Boost Smartptr如何在boost / smart_ptr / detail / sp_counted_base_gcc_x86.hpp(或您平台的相应文件)中从头开始实际实现自己的互斥锁.
总结
以上是内存溢出为你收集整理的c – 增强共享指针:跨多个线程同时读取访问全部内容,希望文章能够帮你解决c – 增强共享指针:跨多个线程同时读取访问所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)