Namensräume
Varianten
Aktionen

atomic_fetch_xor, atomic_fetch_xor_explicit

Von cppreference.com
< c‎ | atomar
Definiert im Header <stdatomic.h>
C atomic_fetch_xor( volatile A* obj, M arg );
(1) (seit C11)
C atomic_fetch_xor_explicit( volatile A* obj, M arg, memory_order order );
(2) (seit C11)

Ersetzt atomar den Wert, auf den obj zeigt, durch das Ergebnis einer bitweisen XOR-Operation zwischen dem alten Wert von obj und arg, und gibt den vorherigen Wert von obj zurück. Die Operation ist eine Lese-Änderungs-Schreib-Operation. 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 volatilen atomaren Typ, um Adressen von sowohl nicht-volatilen als auch volatilen (z. B. speicherprogrammierter I/O) atomaren Objekten zu akzeptieren, und die volatile Semantik wird bei der Anwendung dieser Operation auf volatile atomare Objekte beibehalten. M ist entweder der nicht-atomare Typ, der zu A korrespondiert, wenn A ein atomarer ganzzahliger Typ ist, oder ptrdiff_t, wenn A ein atomarer Zeigertyp ist.

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

Inhalt

[bearbeiten] Parameter

obj - Zeiger auf das zu modifizierende atomare Objekt
arg - der Wert, der mit dem im atomaren Objekt gespeicherten Wert bitweise XOR-verknüpft werden soll
Reihenfolge - Die Speicher-Synchronisierungsordnung für diese Operation: alle Werte sind zulässig

[bearbeiten] Rückgabewert

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

[bearbeiten] Referenzen

  • C17-Standard (ISO/IEC 9899:2018)
  • 7.17.7.5 Die generischen Funktionen atomic_fetch und modify (S. 208)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.17.7.5 Die generischen Funktionen atomic_fetch und modify (S. 284-285)

[bearbeiten] Siehe auch

atomares bitweises ODER
(Funktion) [bearbeiten]
atomares bitweises UND
(Funktion) [bearbeiten]
C++ Dokumentation für atomic_fetch_xor, atomic_fetch_xor_explicit