10
votes

incrément atomique de longue variable?

Si une longue variable est déclarée comme suit: -

Compteur long volatile privé = 0;

MAINTENANT Si je l'incrète à l'aide de l'opérateur de pré-augmentation, l'opération sera-t-elle atomique?

Si oui, alors sera-t-il plus efficace que java.util.concurrent.atomic.atomiclong incrément de l'objet ??


2 commentaires

L'utilisation d'un opérateur de pré-augmentation ne change pas le fait que l'incrémentation est une opération non atomique.


Comme l'a dit MRE, ce n'est pas atomique. Ce qui se passe (fondamentalement) est que la valeur est chargée, puis incrémentée puis la valeur incrémentée sera à nouveau stockée. Ainsi, ce n'est pas atomique. Jetez un coup d'œil à Ceci


4 Réponses :


17
votes

volatile Le mot clé ne résout que Visibilité problème. Vous devez utiliser atomiclong ou synchronisé méthode / bloc pour atomicité ( Atomicité dans la programmation simultanée ).

Un autre article qui est sorti aujourd'hui: démontrer lorsqu'il est nécessaire lorsque la volatilité est requise


3 commentaires

+1 J'ai appris un nouveau terme, "atomicité". J'aurais probablement l'atome d'atomique ou atomictueuse. :-)


@ user949300 atomicité est un mot approprié utilisé dans le monde simultané et DBMS


@Pangea est-ce juste visibilité uniquement ou Commander aussi?



3
votes

L'opérateur de pré-augmentation est pas atomique. De plus, l'incrémentation d'un long est susceptible d'être moins efficace que d'utiliser atomiclong sur presque toutes les plates-formes, car ce dernier est supporté par le matériel.


0 commentaires

2
votes

La réponse courte est n °, vous devrez synchroniser la méthode qui incristez le compteur, de préférence, utilisez un atomiclong.

Pour l'enregistrement, ++ Les opérateurs ne sont pas atomiques même sur les entiers .


0 commentaires

2
votes

Une variable volatile n'est pas la même qu'une variable atomique.

Pour les variables volatiles, le compilateur Java tentera de minimiser les commandes de mélange autour de l'efficacité (ne me posez pas les détails de cela ..), d'éviter les problèmes de concurrence.

Les variables atomiques sont explicitement fabriquées pour les opérations atomiques, comme dans votre cas incrémentant une variable atomique.


0 commentaires