下面給出的析構函數:智能指針析構競爭條件
~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