Sto leggendo http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html e alcuni problemi di thread safety non sono ancora chiari per me:
- Lo standard garantisce che il conteggio dei riferimenti sia gestito thread-safe e sia indipendente dalla piattaforma, giusto?
- Problema simile: lo standard garantisce che solo un thread (tenendo l'ultimo riferimento) chiamerà l'eliminazione sull'oggetto condiviso, giusto?
- shared_ptr non garantisce alcun thread safety per gli oggetti in esso archiviati?
MODIFICARE:
Pseudo codice:
// Thread I
shared_ptr<A> a (new A (1));
// Thread II
shared_ptr<A> b (a);
// Thread III
shared_ptr<A> c (a);
// Thread IV
shared_ptr<A> d (a);
d.reset (new A (10));
La chiamata a reset () nel thread IV eliminerà l'istanza precedente di una classe creata nel primo thread e la sostituirà con una nuova istanza? Inoltre, dopo aver chiamato reset () nel thread IV, gli altri thread vedranno solo l'oggetto appena creato?
make_shared
posto dinew