下面给出的析构函数:智能指针析构竞争条件
~shared_ptr(){
*_ref_count--;
if(*_ref_count==0){
delete _p;
delete _ref_count;
}
}
如果
_ref_count == 2
可以在两个线程释放智能指针事业双删除(崩溃)和/或根本没有删除(内存泄漏)以及如何?
下面给出的析构函数:智能指针析构竞争条件
~shared_ptr(){
*_ref_count--;
if(*_ref_count==0){
delete _p;
delete _ref_count;
}
}
如果
_ref_count == 2
可以在两个线程释放智能指针事业双删除(崩溃)和/或根本没有删除(内存泄漏)以及如何?
简单的回答
是的,有一个竞争条件。两个线程可以同时递减和测试。
调查的std ::原子或互斥体包裹或使用std :: shared_ptr的(最好的答案)
这只是一个理论问题。 – user8512572
这只是一个理论上的答案 – pm100
这是你的代码或从C++标准库中的提取物? – pm100
'_ref_count'的类型是什么?它是“原子”吗? –
@ pm100 no。它只是一个天真的实现。 – user8512572