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 |