2010-05-05 13 views

Respuesta

13

No, ++i es en realidad tres instrucciones (carga i, incremento en las tiendas i). Definitivamente no es atómico.

+0

Eso es lo que pensaba. Leer valor, incrementar valor, obtener valor. – Finbarr

+2

Y ni siquiera es atómico si 'i' se declara como' volátil'. –

6

La operación ++ no son atómica en Java, ya que se compone de tres operaciones

  1. leer el valor almacenado (atómica)
  2. suma uno al que
  3. valor de tienda (atómica) (atómica)

Así que definitivamente algo malo puede suceder en el medio

en el caso de largo, es incluso más complicado porque incluso la operación de lectura en sí no es atómica.

He encontrado un buen artículo que habla sobre el modelo de memoria

http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic