2012-01-19 20 views
10

De hecho, he escuchado reclamos en ambos sentidos. Sospecho que no lo son, pero quería resolver el tema.¿La asignación de puntero es atómica en C++?

+2

Vea también http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic – sth

+1

C++ no habría necesitado 'atomic ' si ese fuera el caso :) –

Respuesta

14

C++ 03 no conoce la existencia de hilos, por lo que el concepto de atomicidad no tiene mucho sentido para C++ 03, lo que significa que no dice nada al respecto.

C++ 11 sabe sobre hilos, pero una vez más no dice nada sobre la atomicidad de la asignación de punteros. Sin embargo, C++ 11 contiene std::atomic<T*>, que se garantiza que es atómico.

Tenga en cuenta que incluso si escribir en un puntero sin formato es atómico en su plataforma, el compilador aún puede mover esa aserción, por lo que realmente no le compra nada.

Si necesita escribir en un puntero que es compartido entre hilos siga cualquiera std::atomic<T*> (o la no oficial boost::atomic<T*>, gCCS intrínsecos o ventanas atómicas enclavamiento *) o envolver todos los accesos a ese puntero en el mutex.

+0

Puedes obtener boost.atomic aquí: http://www.chaoticmind.net/~hcb/projects/boost.atomic /doc/index.html –

2

La norma C++ no define el comportamiento de subprocesamiento específico. Dependiendo del compilador y la plataforma, la asignación del puntero puede ser o no atómica.

+8

C++ 11 * does * define un comportamiento de subprocesamiento y el modelo de memoria asociado. –

+1

@Frizlab y J.N. ambos son correctos Como decir que Porsche es un automóvil deportivo es correcto pero impreciso, ya que no todos los modelos son autos deportivos :) – mloskot

Cuestiones relacionadas