Heim >Backend-Entwicklung >C++ >Wie erreicht eine einfache MOV-Anweisung eine Release-Acquire-Semantik auf x86?
Der C 11-Speicher_Order_Release stellt den Abschluss eines Schreibvorgangs in den gemeinsamen Speicher sicher, bevor er sichtbar wird zu anderen Threads. In ähnlicher Weise garantiert „memory_order_acquire“, dass ein Lesevorgang den aktuellsten in den Speicher geschriebenen Wert abruft.
Basierend auf der Dokumentation für x86 wird behauptet, dass der MOV-Befehl allein die Acquire-Release-Semantik vermittelt. Es stellt sich jedoch die Frage, wie dieser Mechanismus funktioniert.
In der zitierten Intel-Dokumentation wird betont, dass Lese- und Schreibvorgänge nicht mit anderen ähnlichen Vorgängen auf einem einzelnen Prozessor neu angeordnet werden. Darüber hinaus heißt es im Multi-Core-Abschnitt, dass Prozessoren beim Zugriff auf Cache-kohärenten Shared Memory denselben Ordnungsprinzipien folgen.
Der Schlüssel zum Verständnis der Acquire-Release-Semantik liegt darin in der Erkenntnis, dass die Neuordnung nur lokal, innerhalb jedes CPU-Kerns, erfolgt. Sobald ein Speicher global sichtbar ist, ist er für alle Kerne gleichzeitig zugänglich und kein Kern kann ihn vor diesem Zeitpunkt wahrnehmen. Daher stellen lokale Barrieren wie mfence die sequentielle Konsistenz sicher, indem sie den Speicherpuffer leeren, bevor nachfolgende Ladevorgänge zugelassen werden.
Im Wesentlichen nutzt x86 eine Cache-kohärente Shared-Memory-Architektur, bei der kohärente Caches eine gemeinsame Sicht auf den Speicher bieten Prozessoren. Die kohärente Natur des Speicherzugriffs verstärkt das Single-Core-Speichermodell, bei dem die Programmreihenfolge und ein Speicherpuffer ausreichen, um die Acquire-Release-Semantik zu implementieren.
Die Prinzipien des Acquire -Release- und Barriere-Implementierung gehen über x86 hinaus. Im Allgemeinen ermöglichen schwächere Speichermodelle nur eine lokale Neuordnung, was Barrieren innerhalb eines CPU-Kerns erfordert, um eine bestimmte Ordnung zu erzwingen.
Eine Ausnahme bildet PowerPC, das es ermöglicht, dass Speicher für einige Kerne vor anderen sichtbar werden, wodurch die Möglichkeit von IRIW eingeführt wird ( Neuordnung unabhängiger Lesevorgänge oder unabhängiger Schreibvorgänge. Die meisten Hardware-Speichermodelle verbieten jedoch die Neuordnung von IRIW, wodurch eine globale Speicherreihenfolge über alle Kerne hinweg sichergestellt wird.
Das obige ist der detaillierte Inhalt vonWie erreicht eine einfache MOV-Anweisung eine Release-Acquire-Semantik auf x86?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!