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_leastN._t atomic_int_leastN._t
uint_leastN._t atomic_uint_leastN._t
int_fastN._t atomic_int_fastN._t
uint_fastN._t atomic_uint_fastN._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