Maison >développement back-end >C++ >La lecture-modification-écriture atomique est-elle une opération unique ou deux en C ?
Lecture-Modification-Écriture atomique : une seule opération ou deux ?
À des fins de synchronisation, lecture-modification-écriture atomique (RMW) des opérations comme x.exchange(..., std::memory_order_acq_rel) soulèvent des questions quant à leur traitement. Sont-elles considérées comme une seule opération ou deux opérations distinctes ?
Point de vue du standard
Le standard C considère les opérations RMW comme entités singulières. Cela ressort clairement de leur dénomination et est implicite dans divers langages connexes.
Implications de la synchronisation
Dans votre exemple :
x.exchange(1, std::memory_order_acq_rel); // Line A y.store(1, std::memory_order_relaxed); // Line B
Par conséquent, le code est réduit à :
x.store(1, std::memory_order_release); y.store(1, std::memory_order_relaxed);
Puisqu'il n'y a aucune opération entre ces stocke et les charges correspondantes dans l’autre thread, la synchronisation est effectivement désactivée. Cela permet la possibilité d'imprimer 0, 1.
Implémentation et implication d'ARM64
L'implémentation de x.exchange() par ARM64 soulève des inquiétudes. Cependant, après un examen plus approfondi, il est évident que la mise en œuvre s'aligne sur la perspective de la norme sur une opération RMW unique. La séquence de commande garantit que la dernière valeur lue dans le RMW est cohérente avec l'écriture.
Citation cppreference incorrecte
Le texte cité de cppreference est inexact. Les opérations RMW en C sont traitées comme des opérations uniques et la réorganisation d'autres opérations avant ou après elles est interdite.
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!