Ordre de la mémoire avec les opérations atomiques de lecture-modification-écriture
En C, les opérations atomiques de lecture-modification-écriture (RMW) telles que x .exchange() applique des garanties de commande spécifiques par rapport aux autres charges et magasins. La question se pose de savoir si ces opérations sont prises en compte :
Perspective standard
Selon la norme C, les opérations RMW sont traitées comme des opérations uniques. Ceci est implicite par leur nom singulier et la formulation associée.
Implémentation ARM64
Dans ARM64, les opérations RMW sont implémentées sous la forme d'une séquence d'instructions de chargement, d'échange atomique et de stockage. . Bien que théoriquement cette implémentation permette à l'instruction de magasin de devenir visible avant l'échange atomique, cela n'affecte pas les garanties d'ordre de mémoire de la norme.
Synchronisation de la mémoire
Synchronisation de la mémoire en C est principalement basé sur la relation de synchronisation entre les opérations de libération et d'acquisition. Dans l'exemple de code fourni :
Analyse de synchronisation
Comme il n'y a pas d'autres opérations avec lesquelles se synchroniser, la séquence suivante se produit :
Sortie possible
Par conséquent, le code peut en effet sortir 0, 1. La perspective de la norme implique que l'opération RMW est une opération unique avec aucune garantie supplémentaire, permettant cette sortie.
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!