Warum der Store von std::atomic XCHG für sequentielle Konsistenz verwendet
Im Kontext von std::atomic für x86- und x86_64-Architekturen a Der Speichervorgang mit sequentieller Konsistenz (std::memory_order_seq_cst) verwendet XCHG anstelle eines einfachen Speichers mit einer Speicherbarriere als Technik, um eine semantische Release-Semantik zu erreichen.
Sequentielle Konsistenz und xchg
Sequentielle Konsistenz schreibt vor, dass alle Speicheroperationen scheinbar in einer bestimmten Reihenfolge ausgeführt werden, und diese Reihenfolge ist für alle Threads gleich. XCHG, ein x86-Befehl, der die Werte zweier Operanden atomar austauscht, erfüllt von Natur aus diese sequentielle Konsistenzanforderung. Durch die Verwendung von XCHG zur Ausführung eines Schreibvorgangs stellt std::atomic sicher, dass der Speicher an einem bestimmten Punkt in der Ausführungsreihenfolge global für alle Threads sichtbar wird, wodurch eine Neuordnung bei nachfolgenden Vorgängen verhindert wird.
mov- store mfence vs. XCHG
Während ein einfacher mov-store gefolgt von einem Memory Fence (wie mfence) theoretisch Release-Semantik bereitstellen könnte, ist dies für sequenzielle Release-Store-Vorgänge nicht ausreichend. MFENCE, eine Memory-Fence-Anweisung, die eine Speicherbarriere einrichtet, stellt sicher, dass vorherige Schreibvorgänge vor dem Fortfahren in den Speicher übernommen werden. Es verhindert jedoch nicht, dass nachfolgende Ladevorgänge vor dem Release-Store neu angeordnet werden.
Leistungsüberlegungen
Die Wahl zwischen mov-store mfence und XCHG für sequenzielle Release Store-Vorgänge erfordern Leistungseinbußen.
Implementierungsdetails
In der Praxis variiert die spezifische Implementierung des Speichers von std::atomic mit sequenzieller Konsistenz je nach Compiler und Hardwarearchitektur.
Implicit Acquire Fence
Die Aussage, dass x86 Geschäfte haben einen impliziten Erwerbszaun, der falsch ist. Stores auf x86 haben eine Release-Semantik, keine Acquire-Semantik. Acquire-Semantiken werden typischerweise mithilfe von Speicherbarrieren wie mfence oder atomaren Lesevorgängen mit der std::memory_order_acquire-Semantik erzwungen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3