2010-05-05 15 views

risposta

13

No, ++i è in realtà tre istruzioni (carico i, incremento, conservare in i). Non è assolutamente atomico.

+0

Questo è quello che ho pensato. Leggi il valore, incrementa il valore, ottieni valore. – Finbarr

+2

E non è nemmeno atomico se 'i' è dichiarato come 'volatile'. –

6

L'operazione ++ non sono atomiche in Java, perché è composto di tre operazioni

  1. Leggere il valore memorizzato (atomica)
  2. aggiunge un ad esso (atomico)
  3. valore Store (atomica)

Così definitivamente qualcosa di brutto possa accadere tra

nel caso di a lungo, è ancora più complicato perché anche l'operazione di lettura non è atomica.

ho trovato un bel articolo che parla del modello di memoria

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