C ++ - Bibliothek - <atomar>
Einführung
Hierbei handelt es sich um Typen, die einen Wert kapseln, dessen Zugriff garantiert keine Datenrennen verursacht und zum Synchronisieren von Speicherzugriffen zwischen verschiedenen Threads verwendet werden kann. Die Atombibliothek bietet Komponenten für feinkörnige Atomoperationen, die eine sperrenlose gleichzeitige Programmierung ermöglichen. Jede atomare Operation ist in Bezug auf jede andere atomare Operation, an der dasselbe Objekt beteiligt ist, unteilbar.
Atomtyp
Sr.Nr. | Elementtypen & Definition |
---|---|
1 | atomar Atomic Class Template und Spezialisierungen für Bool-, Integral- und Zeigertypen |
Atomtypen im C-Stil
Das Folgende sind Atomtypen und werden auch in diesem Header definiert.
Atomik für grundlegende Integraltypen .
Dies sind entweder typedefs der entsprechenden vollständigen Spezialisierung der atomar Klassenvorlage oder eine Basisklasse einer solchen Spezialisierung.
Atomics für breitenbasierte Integrale (die in definiert sind<cinttypes>).
Jedes von diesen ist entweder ein Alias eines der oben genannten Atomics für grundlegende Integraltypen oder einer vollständigen Spezialisierung desatomarKlassenvorlage mit erweitertem Integraltyp .
Dabei ist N eine von 8, 16, 32, 64 oder eine andere von der Bibliothek unterstützte Typbreite.
enthaltener Typ | Atomtyp | Beschreibung |
---|---|---|
bool |
atomic_bool | |
char |
atomic_char | |
signed char |
atomic_schar | |
unsigned char |
atomic_uchar | |
short |
atomic_short | |
unsigned short |
atomic_ushort | |
int |
atomic_int | |
unsigned int |
atomic_uint | |
long |
atomic_long | |
unsigned long |
atomic_ulong | |
long long |
atomic_llong | |
unsigned long long |
atomic_ullong | |
wchar_t |
atomic_wchar_t | |
char16_t |
atomic_char16_t | |
char32_t |
atomic_char32_t | |
intmax_t | atomic_intmax_t | |
uintmax_t | atomic_uintmax_t | |
int_least N._t |
atomic_int_least N._t |
|
uint_least N._t |
atomic_uint_least N._t |
|
int_fast N._t |
atomic_int_fast N._t |
|
uint_fast N._t |
atomic_uint_fast N._t |
|
intptr_t | atomic_intptr_t | |
uintptr_t | atomic_uintptr_t | |
size_t | atomic_size_t | |
ptrdiff_t | atomic_ptrdiff_t |
Operationen an Atomtypen
&Sr.Nr. | Operationen & Definition |
---|---|
1 | atomic_is_lock_free Es wird verwendet, um zu überprüfen, ob die Operationen des Atomtyps sperrfrei sind |
2 | atomic_store & atomic_store_explicit Es ersetzt automatisch den Wert des Atomobjekts durch ein nichtatomares Argument |
3 | atomic_load & atomic_load_explicit Es erhält atomar den in einem Atomobjekt gespeicherten Wert |
4 | atomic_exchange & atomic_exchange_explicit Es ersetzt atomar den Wert des Atomobjekts durch ein nichtatomares Argument und gibt den alten Wert des Atomobjekts zurück |
5 | atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_strong & atomic_compare_exchange_strong_explicit Es vergleicht atomar den Wert des Atomobjekts mit einem nichtatomaren Argument und führt einen Atomaustausch durch, wenn es gleich ist, oder eine Atomlast, wenn nicht |
6 | atomic_fetch_add & atomic_fetch_add_explicit Es fügt einem atomaren Objekt einen nichtatomaren Wert hinzu und erhält den vorherigen Wert des atomaren Objekts |
7 | atomic_fetch_sub & atomic_fetch_sub_explicit Es subtrahiert einen nichtatomaren Wert von einem atomaren Objekt und erhält den vorherigen Wert des Atoms |
8 | atomic_fetch_and & atomic_fetch_and_explicit Es ersetzt das atomare Objekt durch das Ergebnis des logischen UND durch ein nichtatomares Argument und erhält den vorherigen Wert des Atoms |
9 | atomic_fetch_or & atomic_fetch_or_explicit Es ersetzt das atomare Objekt durch das Ergebnis des logischen ODER durch ein nichtatomares Argument und erhält den vorherigen Wert des Atoms |
10 | atomic_fetch_xor & atomic_fetch_xor_explicit Es ersetzt das Atomobjekt durch das Ergebnis des logischen XOR durch ein nichtatomares Argument und erhält den vorherigen Wert des Atoms |
Flag-Typ und Operationen
Sr.Nr. | Flaggentyp & Definition |
---|---|
1 | atomic_flag Der sperrfreie boolesche Atomtyp |
2 | atomic_flag_test_and_set & atomic_flag_test_and_set_explicit Es setzt das Flag atomar auf true und gibt seinen vorherigen Wert zurück |
3 | atomic_flag_clear & atomic_flag_clear_explicit Es setzt den Wert des Flags atomar auf false |