Ecco alcuni snippet di codice.È condiviso il thread di scambio shared_ptr?
std::shared_ptr<int> global(new int(1));
void swapper(int x)
{
std::shared_ptr<int> sp(new int(x));
global.swap(sp);
}
supponga di voler chiamare swapper
in thread paralleli. Sarebbe sicuro?
Sono a conoscenza di questo answer. Mostra come l'assegnazione del puntatore non è thread-safe se riassegno un valore a global
.
La mia domanda è se la funzione membro swap
è in sé thread-safe.
Da un lato le funzioni del blocco di controllo di shared_ptr sono thread-safe. D'altra parte presumo che io stia girando i puntatori ai blocchi di controllo, quindi non dovrebbe essere thread-safe.
Qual è la connessione lì? Il thread swap
è sicuro?
Senza l'uso di 'swap', questa funzione dovrebbe probabilmente assomigliare a' global.reset (new int (x)) '. – Barry
@Barry: non se vuoi che sia thread-safe. –