atomic_init
| Definiert im Header <stdatomic.h> |
||
| void atomic_init( volatile A* obj, C desired ); |
(seit C11) | |
Initialisiert das standardkonstruierte atomare Objekt obj mit dem Wert desired. Die Funktion ist nicht atomar: Gleichzeitiger Zugriff von einem anderen Thread, auch über eine atomare Operation, ist ein Datenrennen.
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 Bindung ist. Wenn eine Makrodefinition unterdrückt wird, um auf eine tatsächliche Funktion zuzugreifen (z. B. in Klammern wie (atomic_init)(...)), oder wenn ein Programm einen externen Bezeichner mit dem Namen einer generischen Funktion definiert, ist das Verhalten undefiniert.
Inhalt |
[bearbeiten] Parameter
| obj | - | Zeiger auf ein atomares Objekt, das initialisiert werden soll |
| desired | - | der Wert, mit dem das atomare Objekt initialisiert werden soll |
[bearbeiten] Rückgabewert
(keine)
[bearbeiten] Hinweise
atomic_init ist die einzige Möglichkeit, dynamisch zugeordnete atomare Objekte zu initialisieren. Zum Beispiel
_Atomic int *p = malloc(sizeof(_Atomic int)); atomic_init(p, 42);
[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.17.2.2 Die generische Funktion atomic_init (p: TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.17.2.2 Die generische Funktion atomic_init (p: 201)
- C11-Standard (ISO/IEC 9899:2011)
- 7.17.2.2 Die generische Funktion atomic_init (p: 274-275)
[bearbeiten] Siehe auch
| (C11)(veraltet in C17)(entfernt in C23) |
initialisiert ein neues atomares Objekt (Makro-Funktion) |
| C++ Dokumentation für atomic_init
| |