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_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 |
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 |