2017-08-24 4 views
0

der destructor Da unten:Smart Pointer Destructor Race-Bedingung

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

Wenn

_ref_count == 2

kann zwei Threads die Smart-Pointer Ursache Doppel Löschen Freigabe (Absturz) und/oder gar nicht löschen (Speicherleck) und wie?

+2

dies ist der Code oder ein Auszug aus einer C++ Standard-Bibliothek? – pm100

+0

Was ist der Typ von '_ref_count'? Ist es "atomar"? –

+0

@ pm100 Nr. Es ist nur eine naive Umsetzung. – user8512572

Antwort

0

Einfache Antwort

Ja, es gibt eine Race Condition. Zwei Threads können gleichzeitig dekrementieren und testen.

std :: Untersuchung atomare oder in einem Mutex wickeln oder std :: shared_ptr (die beste Antwort)

+0

Dies ist nur eine theoretische Frage. – user8512572

+1

das ist nur eine theoretische Antwort – pm100