2017-08-24 87 views
0

下面給出的析構函數:智能指針析構競爭條件

~shared_ptr(){ 
    *_ref_count--; 
    if(*_ref_count==0){ 
     delete _p; 
     delete _ref_count; 
    } 
} 

如果

_ref_count == 2

可以在兩個線程釋放智能指針事業雙刪除(崩潰)和/或根本沒有刪除(內存泄漏)以及如何?

+2

這是你的代碼或從C++標準庫中的提取物? – pm100

+0

'_ref_count'的類型是什麼?它是「原子」嗎? –

+0

@ pm100 no。它只是一個天真的實現。 – user8512572

回答

0

簡單的回答

是的,有一個競爭條件。兩個線程可以同時遞減和測試。

調查的std ::原子或互斥體包裹或使用std :: shared_ptr的(最好的答案)

+0

這只是一個理論問題。 – user8512572

+1

這只是一個理論上的答案 – pm100