2010-05-05 7 views

Répondre

13

Non, ++i est en fait trois instructions (charge i, incrément, magasin en i). Ce n'est certainement pas atomique.

+0

C'est ce que je pensais. Lire la valeur, incrémenter la valeur, obtenir de la valeur. – Finbarr

+2

Et ce n'est même pas atomique si 'i 'est déclaré' volatile '. –

6

L'opération ++ ne sont pas atomiques en Java, car il est composé de trois opérations

  1. Lire la valeur stockée (atomique)
  2. permet d'ajouter une à elle (atomique)
  3. valeur de magasin (atomique)

donc définitivement quelque chose de mal peut arriver entre

dans le cas de longtemps, c'est encore plus délicat car même l'opération de lecture elle-même n'est pas atomique.

Je trouve un bel article qui parle du modèle de mémoire

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