Namespaces
Variants

atomic_exchange, atomic_exchange_explicit

From cppreference.net
Definiert im Header <stdatomic.h>
C atomic_exchange ( volatile A * obj, C desired ) ;
(1) (seit C11)
C atomic_exchange_explicit ( volatile A * obj, C desired, memory_order order ) ;
(2) (seit C11)

Ersetzt atomar den Wert, auf den obj zeigt, durch desired und gibt den zuvor in obj gehaltenen Wert zurück. Der Vorgang ist ein Read-Modify-Write-Vorgang. Die erste Version ordnet Speicherzugriffe gemäß memory_order_seq_cst , die zweite Version ordnet Speicherzugriffe gemäß order .

Dies ist eine generische Funktion , die für alle atomaren Objekttypen A definiert ist. Das Argument ist ein Zeiger auf einen flüchtigen atomaren Typ, um Adressen sowohl nicht-flüchtiger als auch flüchtiger (z.B. speichergemappter E/A) atomarer Objekte zu akzeptieren, und die flüchtige Semantik bleibt bei der Anwendung dieser Operation auf flüchtige atomare Objekte erhalten. C ist der nicht-atomare Typ, der A entspricht.

Es ist nicht spezifiziert, ob der Name einer generischen Funktion ein Makro oder ein mit externer Bindung deklarierter Bezeichner ist. Wenn eine Makrodefinition unterdrückt wird, um auf eine tatsächliche Funktion zuzugreifen (z. B. in Klammern gesetzt wie ( atomic_exchange ) ( ... ) ), oder ein Programm einen externen Bezeichner mit dem Namen einer generischen Funktion definiert, ist das Verhalten undefiniert.

Inhaltsverzeichnis

Parameter

obj - Zeiger auf das atomare Objekt, das modifiziert werden soll
desired - der Wert, mit dem das atomare Objekt ersetzt werden soll
order - die Speichersynchronisierungsreihenfolge für diesen Vorgang: alle Werte sind erlaubt

Rückgabewert

Der zuvor vom atomaren Objekt, auf das obj zeigt, gehaltene Wert.

Referenzen

  • C17-Standard (ISO/IEC 9899:2018):
  • 7.17.7.3 Die atomic_exchange-Generic-Funktionen (S: 207)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.17.7.3 Die atomic_exchange-Generic-Funktionen (S: 283)

Siehe auch

tauscht einen Wert mit einem atomaren Objekt aus, wenn der alte Wert den Erwartungen entspricht, andernfalls wird der alte Wert gelesen
(Funktion)
C++-Dokumentation für atomic_exchange , atomic_exchange_explicit