Pourquoi les opérations atomiques ne sont pas la valeur par défaut
En Java, l'opérateur d'incrémentation (i ) n'est pas atomique. Atomicité garantit qu'une opération est entièrement terminée avant le début de l'opération suivante, garantissant ainsi des résultats cohérents et fiables. Cependant, tous les cas d'utilisation de l'opérateur d'incrémentation ne nécessitent pas d'atomicité.
Considérez le scénario courant d'incrémentation d'un compteur dans un environnement multithread. L'utilisation de i nécessiterait des mécanismes de synchronisation coûteux aux niveaux logiciel et matériel, car l'atomicité nécessite un accès exclusif à la variable partagée.
Si l'atomicité était appliquée pour toutes les opérations d'incrémentation, cela introduirait une surcharge importante dans les scénarios où elle est appliquée. pas nécessaire. Par exemple, dans un contexte à thread unique, où la condition de concurrence critique de deux threads essayant d'incrémenter simultanément la même variable n'est pas un problème, un incrément atomique inefficace serait inutile.
De plus, rendre i atomique échouerait compatibilité avec les langages de programmation populaires, tels que C et C . De plus, cela introduirait une confusion pour les programmeurs qui quittent ces langages, car ils devraient utiliser une forme d'incrémentation non atomique (i = i 1) en Java.
Même au niveau des instructions d'assemblage, l'incrément atomique les opérations présentent souvent des inconvénients en termes de performances. Par exemple, dans l'architecture x86, un "préfixe de verrouillage" spécial est requis pour rendre l'instruction d'incrémentation atomique, ce qui entraîne une surcharge supplémentaire.
Par conséquent, en l'absence de synchronisation atomique explicite, i reste un non-atomique fonctionnement en Java, permettant une optimisation des performances dans des scénarios où l'atomicité n'est pas une exigence stricte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!