Namespaces
Variants

atomic_init

From cppreference.net
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, selbst durch 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 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_init ) ( ... ) ), oder ein Programm einen externen Bezeichner mit dem Namen einer generischen Funktion definiert, ist das Verhalten undefiniert.

Inhaltsverzeichnis

Parameter

obj - Zeiger auf ein atomares Objekt zur Initialisierung
desired - der Wert, mit dem das atomare Objekt initialisiert wird

Rückgabewert

(keine)

Hinweise

atomic_init ist die einzige Möglichkeit, dynamisch allokierte atomare Objekte zu initialisieren. Zum Beispiel:

_Atomic int *p = malloc(sizeof(_Atomic int));
atomic_init(p, 42);

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.17.2.2 Die atomic_init-Generikfunktion (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.17.2.2 Die atomic_init-Generikfunktion (S: 201)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.17.2.2 Die atomic_init generische Funktion (S: 274-275)

Siehe auch

(C11) (veraltet in C17) (entfernt in C23)
initialisiert ein neues atomares Objekt
(Funktionsmakro)
C++-Dokumentation für atomic_init