ATOMIC_VAR_INIT
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert im Header
<atomic>
|
||
|
#define ATOMIC_VAR_INIT(value) /* implementierungsdefiniert */
|
(seit C++11)
(veraltet in C++20) |
|
Erweitert sich zu einem Ausdruck, der zur Initialisierung eines
std::atomic
-Objekts verwendet werden kann, das aus
value
initialisiert werden kann. Wenn das atomare Objekt eine statische Speicherdauer hat, handelt es sich bei dieser Initialisierung um eine
constant initialization
.
Hinweise
Der Zugriff auf die Variable während der Initialisierung von einem anderen Thread aus, selbst durch eine atomare Operation, ist ein Datenrennen (dies kann passieren, wenn die Adresse sofort an einen anderen Thread mit einer std::memory_order_relaxed Operation übergeben wird)
Dieses Makro wird hauptsächlich aus Kompatibilitätsgründen mit C bereitgestellt; es verhält sich genauso wie der Konstruktor von std::atomic .
Beispiel
#include <atomic> #include <iostream> int main() { std::atomic<int> a = ATOMIC_VAR_INIT(1); // std::atomic<int> a(1); // C++-only alternative std::cout << "Initialized std::atomic<int> as: " << a << '\n'; }
Ausgabe:
Initialized std::atomic<int> as: 1
Siehe auch
|
(C++11)
(veraltet in C++20)
|
nicht-atomare Initialisierung eines standardkonstruierten atomaren Objekts
(Funktions-Template) |
|
konstruiert ein atomares Objekt
(öffentliche Member-Funktion von
std::atomic<T>
)
|
|
|
C-Dokumentation
für
ATOMIC_VAR_INIT
|
|