Sono questi due equivalenti? In altre parole, gli operatori ++ e - atomici?Concorrenza Java int ++ equivalente a AtomicInteger.incrementAndGet()?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
Sono questi due equivalenti? In altre parole, gli operatori ++ e - atomici?Concorrenza Java int ++ equivalente a AtomicInteger.incrementAndGet()?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
No, ++i
è in realtà tre istruzioni (carico i
, incremento, conservare in i
). Non è assolutamente atomico.
L'operazione ++ non sono atomiche in Java, perché è composto di tre operazioni
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
Questo è quello che ho pensato. Leggi il valore, incrementa il valore, ottieni valore. – Finbarr
E non è nemmeno atomico se 'i' è dichiarato come 'volatile'. –