Heim > Backend-Entwicklung > C++ > Ist Atomic Read-Modify-Write eine oder zwei einzelne Operationen in C?

Ist Atomic Read-Modify-Write eine oder zwei einzelne Operationen in C?

Patricia Arquette
Freigeben: 2024-12-05 02:13:09
Original
495 Leute haben es durchsucht

Is Atomic Read-Modify-Write a Single Operation or Two in C  ?

Atomeres Lesen-Ändern-Schreiben: Eine einzelne Operation oder zwei?

Zu Synchronisationszwecken wird atomisches Lesen-Ändern-Schreiben (RMW) verwendet. Operationen wie x.exchange(..., std::memory_order_acq_rel) werfen Fragen bezüglich ihrer Behandlung auf. Werden sie als ein einzelner Vorgang oder als zwei separate Vorgänge betrachtet?

Sichtweise des Standards

Der C-Standard betrachtet RMW-Vorgänge als singuläre Einheiten. Dies geht aus ihrer Benennung hervor und ist in verschiedenen verwandten Sprachen implizit enthalten.

Auswirkungen der Synchronisierung

In Ihrem Beispiel:

x.exchange(1, std::memory_order_acq_rel); // Line A
y.store(1, std::memory_order_relaxed); // Line B
Nach dem Login kopieren
  • Zeile B verfügt nicht über ein passendes Release oder einen stärkeren Store, sodass es effektiv y.store(1, std::memory_order_relaxed).
  • Leitung A hat nur eine passende Last, wodurch ihr „Erfassen“-Teil überflüssig wird. Es kann als x.store(1, std::memory_order_release) angezeigt werden.

Folglich wird der Code reduziert auf:

x.store(1, std::memory_order_release);
y.store(1, std::memory_order_relaxed);
Nach dem Login kopieren

Da es zwischen diesen keine Operationen gibt speichert und die entsprechenden Lasten im anderen Thread speichert, wird die Synchronisierung effektiv deaktiviert. Dies ermöglicht die Möglichkeit, 0, 1 zu drucken.

ARM64-Implementierung und Implikation

Die Implementierung von x.exchange() durch ARM64 gibt Anlass zur Sorge. Bei näherer Betrachtung wird jedoch deutlich, dass die Implementierung mit der Sichtweise des Standards auf einen einzelnen RMW-Vorgang übereinstimmt. Die Bestellreihenfolge garantiert, dass der zuletzt gelesene Wert im RMW mit dem Schreibwert übereinstimmt.

Falsches cppreference-Zitat

Der zitierte Text aus cppreference ist ungenau. RMW-Operationen in C werden als einzelne Operationen behandelt und die Neuordnung anderer Operationen davor oder danach ist verboten.

Das obige ist der detaillierte Inhalt vonIst Atomic Read-Modify-Write eine oder zwei einzelne Operationen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage