Libreria C ++ - <atomico>

introduzione

Questi sono tipi che incapsulano un valore il cui accesso è garantito per non causare gare di dati e possono essere utilizzati per sincronizzare gli accessi alla memoria tra thread diversi e la libreria atomica fornisce componenti per operazioni atomiche a grana fine consentendo una programmazione simultanea senza blocchi. Ogni operazione atomica è indivisibile rispetto a qualsiasi altra operazione atomica che coinvolge lo stesso oggetto.

Tipo atomico

Sr.No. Tipi di membri e definizione
1 atomico

Modello di classe atomica e specializzazioni per i tipi bool, integrale e puntatore

Tipi atomici in stile C.

I seguenti sono tipi atomici e anche definiti in questa intestazione.

atomiche per tipi integrali fondamentali .

Questi sono o typedef della corrispondente specializzazione completa di atomico modello di classe o una classe base di tale specializzazione.

atomics per integrali basati sulla larghezza (quelli definiti in<cinttypes>).

Ognuno di questi è un alias di uno degli atomici di cui sopra per i tipi integrali fondamentali o di una specializzazione completa diatomicomodello di classe con un tipo integrale esteso .

Dove N è uno in 8, 16, 32, 64 o qualsiasi altra larghezza di tipo supportata dalla libreria.

tipo contenuto tipo atomico descrizione
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

Operazioni sui tipi atomici

&
Sr.No. Operazioni e definizione
1 atomic_is_lock_free

Viene utilizzato per verificare se le operazioni del tipo atomico sono prive di blocchi

2 atomic_store e atomic_store_explicit

Sostituisce automaticamente il valore dell'oggetto atomico con un argomento non atomico

3 atomic_load e atomic_load_explicit

Ottiene atomicamente il valore memorizzato in un oggetto atomico

4 atomic_exchange e atomic_exchange_explicit

Sostituisce atomicamente il valore dell'oggetto atomico con un argomento non atomico e restituisce il vecchio valore dell'atomico

5 atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_strong & atomic_compare_exchange_strong_explicit

Confronta atomicamente il valore dell'oggetto atomico con un argomento non atomico ed esegue lo scambio atomico se uguale o il carico atomico in caso contrario

6 atomic_fetch_add e atomic_fetch_add_explicit

Aggiunge un valore non atomico a un oggetto atomico e ottiene il valore precedente dell'atomico

7 atomic_fetch_sub e atomic_fetch_sub_explicit

Sottrae un valore non atomico da un oggetto atomico e ottiene il valore precedente dell'atomico

8 atomic_fetch_and & atomic_fetch_and_explicit

Sostituisce l'oggetto atomico con il risultato di AND logico con un argomento non atomico e ottiene il valore precedente dell'atomico

9 atomic_fetch_or & atomic_fetch_or_explicit

Sostituisce l'oggetto atomico con il risultato di OR logico con un argomento non atomico e ottiene il valore precedente dell'atomico

10 atomic_fetch_xor e atomic_fetch_xor_explicit

Sostituisce l'oggetto atomico con il risultato di XOR logico con un argomento non atomico e ottiene il valore precedente dell'atomico

Tipo di flag e operazioni

Sr.No. Tipo di flag e definizione
1 atomic_flag

Il tipo atomico booleano senza blocco

2 atomic_flag_test_and_set & atomic_flag_test_and_set_explicit

Imposta atomicamente il flag su true e restituisce il valore precedente

3 atomic_flag_clear e atomic_flag_clear_explicit

Imposta atomicamente il valore del flag su false