Table des matières
Distinction entre les opérations singulières et séparées en lecture-modification-écriture atomique
Maison développement back-end C++ Une lecture-modification-écriture atomique est-elle une opération singulière ou une séquence d'opérations d'acquisition-libération ?

Une lecture-modification-écriture atomique est-elle une opération singulière ou une séquence d'opérations d'acquisition-libération ?

Dec 01, 2024 pm 02:06 PM

Is an Atomic Read-Modify-Write a Singular Operation or a Sequence of Acquire-Release Operations?

Distinction entre les opérations singulières et séparées en lecture-modification-écriture atomique

Dans le contexte de l'ordre de la mémoire, le comportement de la lecture-modification-écriture atomique (RMW) les opérations, telles que x.exchange(...) avec std::memory_order_acq_rel, posent une question : cette opération est-elle traitée comme une entité unique avec une sémantique d'acquisition-libération ou comme une séquence d'opérations comprenant une charge d'acquisition suivie d'un magasin de libération ?

Perspective standard : opération singulière

Selon le standard C, une opération RMW est considérée comme une opération singulière. Cette implication découle de son nom, qui utilise le singulier, et du libellé associé de la norme. Par conséquent, dans ce contexte, l'opération x.exchange(...) est considérée comme une entité unique.

Implications sur l'ordre : réorganisation potentielle

Si l'on considère le Du point de vue du standard, le code fourni a le potentiel de générer 0, 1. Cette possibilité survient parce que le standard n'est pas défini en termes de réorganisation des opérations mais plutôt en termes de relation de synchronisation entre la version et Opérations d'acquisition.

Plus précisément, l'opération y.load(acquire) n'a pas de magasin de version ou plus fort correspondant. Par conséquent, il ne se synchronise avec aucune autre opération et est effectivement traité comme une charge relâchée (y.load(relaxed)).

De plus, le composant "acquire" de l'opération x.exchange(1, acq_rel) ne ne pas avoir de magasins avec lesquels se synchroniser, ce qui rend sa sémantique d'acquisition efficacement détendue. Cela le transforme effectivement en une opération x.store(1, release).

Comme il n'y a aucune opération avant le magasin et après le chargement sur x dans les threads respectifs, la synchronisation potentielle entre ces opérations devient redondante. Par conséquent, les deux charges peuvent renvoyer 0 ou 1, permettant la sortie 0, 1.

Conclusion

Du point de vue du standard C, une lecture atomique L’opération de modification-écriture est considérée comme une opération unique. Cette compréhension implique que, dans l'exemple fourni, le code a le potentiel d'imprimer 0, 1 en raison du manque de synchronisation entre les charges et les magasins.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS Mar 03, 2025 pm 05:53 PM

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour? Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour? Mar 03, 2025 pm 05:52 PM

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour?

Gulc: Cibliothèque C construite à partir de zéro Gulc: Cibliothèque C construite à partir de zéro Mar 03, 2025 pm 05:46 PM

Gulc: Cibliothèque C construite à partir de zéro

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les Mar 03, 2025 pm 05:53 PM

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les

Comment fonctionne la bibliothèque de modèle standard C (STL)? Comment fonctionne la bibliothèque de modèle standard C (STL)? Mar 12, 2025 pm 04:50 PM

Comment fonctionne la bibliothèque de modèle standard C (STL)?

Où est la valeur de retour de la fonction de langue C stockée en mémoire? Où est la valeur de retour de la fonction de langue C stockée en mémoire? Mar 03, 2025 pm 05:51 PM

Où est la valeur de retour de la fonction de langue C stockée en mémoire?

Utilisation distincte et partage de phrases Utilisation distincte et partage de phrases Mar 03, 2025 pm 05:51 PM

Utilisation distincte et partage de phrases

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)? Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)? Mar 12, 2025 pm 04:52 PM

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)?

See all articles