Biblioteka C ++ - <atomic>

Wprowadzenie

Są to typy, które hermetyzują wartość, której dostęp gwarantuje, że nie spowoduje wyścigów danych i może być używany do synchronizowania dostępu do pamięci między różnymi wątkami, a biblioteka atomowa zapewnia komponenty do drobnoziarnistych operacji atomowych, umożliwiając bezblokowe programowanie współbieżne. Każda operacja atomowa jest niepodzielna w stosunku do każdej innej operacji atomowej, która dotyczy tego samego obiektu.

Typ atomowy

Sr.No. Typy i definicje członków
1 atomowy

Szablon klasy Atomic i specjalizacje dla typów logicznych, całkowitych i wskaźnikowych

Typy atomowe w stylu C.

Poniżej przedstawiono typy atomowe, które są również zdefiniowane w tym nagłówku.

atomika dla podstawowych typów całkowych .

Są to albo typy definicji odpowiedniej pełnej specjalizacji atomowy szablon klasy lub klasę bazową takiej specjalizacji.

atomics dla całek opartych na szerokości (te zdefiniowane w<cinttypes>).

Każdy z nich jest aliasem jednej z powyższych atomów dla podstawowych typów całkowitych lub pełnej specjalizacjiatomowyszablon klasy z rozszerzonym typem całkowitym .

Gdzie N to jeden na 8, 16, 32, 64 lub dowolny inny typ szerokości obsługiwany przez bibliotekę.

zawarty typ typ atomowy opis
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

Operacje na typach atomowych

&
Sr.No. Operacje i definicja
1 atomic_is_lock_free

Służy do sprawdzania, czy operacje typu atomowego są wolne od blokad

2 atomic_store i atomic_store_explicit

Automatycznie zastępuje wartość obiektu atomowego argumentem niepodzielnym

3 atomic_load & atomic_load_explicit

Atomowo uzyskuje wartość przechowywaną w obiekcie atomowym

4 atomic_exchange & atomic_exchange_explicit

Zastępuje atomowo wartość obiektu atomowego argumentem nieatomowym i zwraca starą wartość atomowego

5 atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_strong & atomic_compare_exchange_strong_explicit

Porównuje atomowo wartość obiektu atomowego z argumentem nieatomowym i przeprowadza atomową wymianę, jeśli jest równe lub atomowe, jeśli nie

6 atomic_fetch_add & atomic_fetch_add_explicit

Dodaje wartość nieatomową do obiektu atomowego i uzyskuje poprzednią wartość atomowej

7 atomic_fetch_sub & atomic_fetch_sub_explicit

Odejmuje wartość nieatomową od obiektu atomowego i uzyskuje poprzednią wartość atomowej

8 atomic_fetch_and & atomic_fetch_and_explicit

Zastępuje obiekt atomowy wynikiem logicznego AND argumentem nieatomowym i uzyskuje poprzednią wartość atomowej

9 atomic_fetch_or & atomic_fetch_or_explicit

Zastępuje obiekt atomowy wynikiem logicznego LUB argumentem nieatomowym i uzyskuje poprzednią wartość atomowej

10 atomic_fetch_xor & atomic_fetch_xor_explicit

Zastępuje obiekt atomowy wynikiem logicznego XOR argumentem nieatomowym i uzyskuje poprzednią wartość atomowej

Typ flagi i operacje

Sr.No. Typ flagi i definicja
1 atomic_flag

Logiczny typ atomowy bez blokad

2 atomic_flag_test_and_set & atomic_flag_test_and_set_explicit

Niepodzielnie ustawia flagę na wartość true i zwraca jej poprzednią wartość

3 atomic_flag_clear & atomic_flag_clear_explicit

Niepodzielnie ustawia wartość flagi na fałsz