Heim Backend-Entwicklung C++ Ist atomares Lesen, Ändern und Schreiben eine einzelne oder eine trennbare atomare Operation?

Ist atomares Lesen, Ändern und Schreiben eine einzelne oder eine trennbare atomare Operation?

Dec 18, 2024 pm 08:16 PM

Is Atomic Read-Modify-Write a Single Atomic Operation or a Separable One?

Ist Atomic Read-Modify-Write eine atomare oder trennbare Operation?

Atomare Read-Modify-Write-Operationen (RMW), wie z x.exchange() sind atomare Operationen, die einen Speicherort sowohl lesen als auch schreiben und sicherstellen, dass die Lese- und Schreibvorgänge der Reihe nach ausgeführt werden. Es ist jedoch nicht explizit definiert, ob diese Vorgänge als einzelne atomare Operation oder als Kombination aus Acquire Load und Release Store betrachtet werden.

Die Perspektive des Standards

Aus der Aus Sicht des C-Standards wird eine RMW-Operation als einzelne Operation betrachtet. Dies ist daran zu erkennen, dass es einen einzigen Namen (RMW) hat und im Standard als einzelne Operation bezeichnet wird. In [N4860](https://isocpp.org/files/papers/n4860.pdf) (Draft Working Paper std::memory_order) heißt es beispielsweise:

„Ein Lese-, Änderungs- und Schreibvorgang damit Bei der Speicherreihenfolge handelt es sich sowohl um eine Erfassungsoperation als auch um eine Freigabeoperation. Vorher oder nachher können keine Speicherlese- oder -schreibvorgänge im aktuellen Thread neu angeordnet werden speichern.“

Atomere vs. trennbare Operationen

Die Unterscheidung zwischen atomaren und trennbaren Operationen ist wichtig, da sie bestimmt, wie andere Operationen mit ihnen interagieren. Wenn eine RMW-Operation als atomar behandelt wird, bedeutet dies, dass sie im Hinblick auf andere Speicherzugriffe nicht neu angeordnet werden kann. Wenn es jedoch als trennbar behandelt wird, besteht die Möglichkeit einer Neuordnung zwischen den Lade- und Speicherkomponenten des Vorgangs.

Beispielcode

Betrachten Sie das folgende Codebeispiel , das x.exchange() und y.store() verwendet, um die Werte von zwei atomaren Variablen, x und, festzulegen y.

std::atomic<int> x, y;

void thread_A() {
    x.exchange(1, std::memory_order_acq_rel);
    y.store(1, std::memory_order_relaxed);
}

void thread_B() {
    int yy = y.load(std::memory_order_acquire);
    int xx = x.load(std::memory_order_acquire);
    std::cout << xx << ", " << yy << std::endl;
}
Nach dem Login kopieren

Wenn x.exchange() als einzelne atomare Operation behandelt wird, bedeutet dies, dass die Lade- und Speicherkomponenten der Operation nicht neu angeordnet werden können. Daher wird Thread B immer beobachten, dass die Werte von x und y beide 1 oder beide 0 sind.

Wenn x.exchange() jedoch als trennbar behandelt wird, bleibt die Möglichkeit offen, dass das Laden und Speichern erfolgt Bestandteile des Betriebs könnten neu angeordnet werden. In diesem Fall könnte Thread B möglicherweise die Werte von x und y als 0, 1 beobachten, da die Last von x vor dem Speichern nach y umgeordnet werden könnte.

Compiler-Implementierung und Standardinterpretation

Aus Sicht des Standards scheint es, dass Thread B 0, 1 nicht beachten sollte. Die ARM64-Implementierung des Codes legt dies jedoch nahe dass der RMW-Vorgang als trennbar behandelt wird, was die Möglichkeit einer Neuordnung zwischen den Lade- und Speicherkomponenten ermöglicht.

Diese scheinbare Diskrepanz wirft die Frage auf, ob das cppreference-Zitat falsch ist oder ob es sich lediglich um ein Missverständnis des Standards handelt. Obwohl es möglich ist, dass das cppreference-Zitat nicht ganz korrekt ist, stimmt es mit der allgemeinen Behandlung von RMW-Operationen durch den Standard als einzelne atomare Operationen überein.

Es ist wichtig zu beachten, dass der Standard das Verhalten von RMW-Operationen nicht explizit definiert alle Umstände. Insbesondere bietet es keine klare Anleitung dazu, wie Synchronisations-mit-Beziehungen auf RMW-Vorgänge angewendet werden. Daher kann Raum für unterschiedliche Interpretationen und Implementierungen von RMW-Operationen bestehen.

Das obige ist der detaillierte Inhalt vonIst atomares Lesen, Ändern und Schreiben eine einzelne oder eine trennbare atomare Operation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

See all articles