Dans le boost::shared_ptr
destructor, cela se fait:Pourquoi le compteur de référence de boost :: shared_ptr n'est-il pas volatile?
if(--*pn == 0)
{
boost::checked_delete(px);
delete pn;
}
où pn
est un pointeur sur le compteur de référence, qui est typedefed comme
shared_ptr::count_type -> detail::atomic_count -> long
Je me serais attendu à la long
être volatile long
, étant donné l'utilisation de threads et le 0-check-and-deletion non-atomique dans le destructeur shared_ptr
ci-dessus. Pourquoi n'est-ce pas volatile?
EDIT:
Il se trouve que je regardais l'en-tête utilisé lorsque l'utilisation multi-thread n'est pas spécifiée (atomic_count.hpp). Dans atomic_count_win32.hpp, la diminution est correctement implémentée pour une utilisation multithread.
Où avez-vous trouvé ce code btw? – jalf
@jalf: shared_ptr_nmt.hpp –