In realtà ho sentito affermazioni in entrambi i modi. Sospetto che non lo siano, ma volevo sistemare l'argomento.L'assegnazione puntatore è atomica in C++?
risposta
C++ 03 non sa dell'esistenza di thread, quindi il concetto di atomicità non ha molto senso per C++ 03, nel senso che non dice nulla a riguardo.
C++ 11 conosce i thread, ma ancora una volta non dice nulla sull'atomicità dell'assegnazione dei puntatori. Tuttavia C++ 11 contiene std::atomic<T*>
, che è garantito per essere atomico.
Si noti che anche se la scrittura su un puntatore non elaborato è atomica sulla piattaforma, il compilatore è ancora libero di spostare tale asserzione, in modo tale da non comprare davvero nulla.
Se avete bisogno di scrivere a un puntatore che è condiviso tra i thread utilizzare uno std::atomic<T*>
(o il non ancora ufficiale boost::atomic<T*>
, GCCS intrinseche o finestre atomiche interbloccate *) o avvolgere tutti gli accessi a tale puntatore in mutex.
Puoi ottenere boost.atomic qui: http://www.chaoticmind.net/~hcb/projects/boost.atomic /doc/index.html –
La norma C++ non definisce un comportamento di threading specifico. A seconda del compilatore e della piattaforma, l'assegnazione del puntatore potrebbe essere o meno atomica.
C++ 11 * fa * definisce un comportamento di threading e il modello di memoria associato. –
@Frizlab e J.N. siete entrambi corretti. Come dire che Porsche è un'auto sportiva è una cosa corretta ma imprecisa, poiché non tutti i modelli sono auto sportive :) – mloskot
- 1. L'operazione ++ è atomica in C#?
- 2. Sta cambiando un puntatore considerato un'azione atomica in C?
- 3. È un'operazione atomica sufficiente
- 4. BOOL è in lettura/scrittura atomica nell'obiettivo C?
- 5. La sequenza è decompressione atomica?
- 6. Contenitore di lista atomica C++
- 7. MERGE è una dichiarazione atomica in SQL2008?
- 8. è Transaction Server SQL atomica
- 9. C++ 11 atomica e conteggio di riferimento del puntatore condiviso intrusivo
- 10. C++ 11 atomica e mutui interprocess
- 11. C'è un puntatore in C# come C++? È sicuro?
- 12. Puntatore C/C++ Domanda
- 13. Accesso non inizializzata variabile privata atomica in C++
- 14. è l'assegnazione della variabile python atomica?
- 15. Comportamento puntatore imprevisto in C++
- 16. C++ puntatore a funzione non è cambiato
- 17. C++ 11 quando incrementa la variabile atomica e la assegna ad un altro valore, è un'operazione atomica?
- 18. mingw-4.8.1 questione atomica
- 19. Inizializzazione puntatore stringa in C#
- 20. C'è un modo per rendere atomica una funzione in C? .
- 21. Il puntatore statico è un puntatore forte?
- 22. Operazione atomica File.Move
- 23. Puntatore a un puntatore nell'obiettivo-c?
- 24. È buona pratica restituire il puntatore dalla funzione in c?
- 25. È possibile rilevare errori di puntatore non validi in C++?
- 26. Il nome della matrice è un puntatore costante in C++?
- 27. Non è un Iterator in C++ una specie di puntatore?
- 28. La scrittura lunga e doppia non è atomica in Java?
- 29. Una variabile swap è garantita per essere atomica in python?
- 30. C: Puntatore inline funzione
Vedere anche http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic – sth
C++ non avrebbe avuto bisogno di 'atomico' se fosse il caso :) –