atomic_exchange, atomic_exchange_explicit
| 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) |
Atomar ersetzt den Wert, auf den obj zeigt, durch desired und gibt den zuvor von obj gehaltenen Wert zurück. Die Operation ist eine Lese-Änder-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. speicherprogrammierten I/O) atomaren Objekten zu akzeptieren, und die volatile Semantik wird bei Anwendung dieser Operation auf volatile atomare Objekte beibehalten. C ist der nicht-atomare Typ, der A entspricht.
Es ist nicht spezifiziert, 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_exchange)(...)), 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 |
| desired | - | Der Wert, mit dem das atomare Objekt ersetzt 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.3 Die generischen Funktionen atomic_exchange (S. 207)
- C11-Standard (ISO/IEC 9899:2011)
- 7.17.7.3 Die generischen Funktionen atomic_exchange (S. 283)
[bearbeiten] Siehe auch
| tauscht einen Wert mit einem atomaren Objekt aus, wenn der alte Wert der erwartete ist, andernfalls liest er den alten Wert (Funktion) | |
| C++-Dokumentation für atomic_exchange, atomic_exchange_explicit
| |