Heim >Backend-Entwicklung >C++ >Handelt es sich bei C Atomic Read-Modify-Write-Vorgängen um einzelne Vorgänge mit Acquire-Release-Semantik oder um eine Folge von Lade- und Speichervorgängen?
Speicherordnung mit atomaren Lese-, Änderungs- und Schreiboperationen
In C werden atomare Lese-, Änderungs- und Schreiboperationen (RMW) wie x .exchange() erzwingt spezifische Bestellgarantien in Bezug auf andere Ladungen und Geschäfte. Es stellt sich die Frage, ob diese Vorgänge berücksichtigt werden:
Standardperspektive
Gemäß dem C-Standard werden RMW-Operationen als Einzeloperationen behandelt. Dies wird durch ihren singulären Namen und den dazugehörigen Wortlaut impliziert.
ARM64-Implementierung
In ARM64 werden RMW-Operationen als eine Folge von Lade-, Atomaustausch- und Speicheranweisungen implementiert . Während diese Implementierung theoretisch ermöglicht, dass die Speicheranweisung vor dem atomaren Austausch sichtbar wird, hat dies keinen Einfluss auf die Speicherordnungsgarantien des Standards.
Speichersynchronisation
Speichersynchronisation in C basiert hauptsächlich auf der Synchronisierungsbeziehung zwischen Freigabe- und Erfassungsvorgängen. Im bereitgestellten Codebeispiel:
Synchronisationsanalyse
Da es keine anderen Vorgänge zum Synchronisieren gibt, ergibt sich folgender Ablauf:
Mögliche Ausgabe
Daher kann der Code tatsächlich 0, 1 ausgeben. Die Perspektive des Standards impliziert, dass die RMW-Operation eine einzelne Operation mit ist Keine zusätzlichen Garantien, die diese Ausgabe ermöglichen.
Das obige ist der detaillierte Inhalt vonHandelt es sich bei C Atomic Read-Modify-Write-Vorgängen um einzelne Vorgänge mit Acquire-Release-Semantik oder um eine Folge von Lade- und Speichervorgängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!