Biblioteca C ++ - <atomic>

Introdução

Esses são tipos que encapsulam um valor cujo acesso é garantido para não causar disputas de dados e podem ser usados ​​para sincronizar acessos de memória entre diferentes threads e a biblioteca atômica fornece componentes para operações atômicas de granulação fina, permitindo a programação simultânea sem bloqueio. Cada operação atômica é indivisível em relação a qualquer outra operação atômica que envolva o mesmo objeto.

Tipo atômico

Sr. Não. Tipos e definição de membros
1 atômico

Modelo de classe atômica e especializações para tipos bool, integral e ponteiro

Tipos atômicos estilo C

A seguir estão os tipos atômicos e também definidos neste cabeçalho.

atômica para tipos integrais fundamentais .

Esses são typedefs da especialização completa correspondente do atômico modelo de classe ou uma classe base de tal especialização.

atômicos para integrais baseados em largura (aqueles definidos em<cinttypes>)

Cada um deles é um alias de um dos atômicos acima para tipos integrais fundamentais ou de uma especialização completa doatômicomodelo de classe com um tipo integral estendido .

Onde N é um em 8, 16, 32, 64 ou qualquer outro tipo de largura suportado pela biblioteca.

tipo contido tipo atômico descrição
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

Operações em tipos atômicos

E
Sr. Não. Operações e Definição
1 atomic_is_lock_free

É usado para verificar se as operações do tipo atômico estão livres de bloqueio

2 atomic_store e atomic_store_explicit

Ele substitui automaticamente o valor do objeto atômico por um argumento não atômico

3 atomic_load & atomic_load_explicit

Ele obtém atomicamente o valor armazenado em um objeto atômico

4 atomic_exchange & atomic_exchange_explicit

Ele substitui atomicamente o valor do objeto atômico por um argumento não atômico e retorna o valor antigo do objeto atômico

5 atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_strong & atomic_compare_exchange_strong_explicit

Ele compara atomicamente o valor do objeto atômico com o argumento não atômico e realiza a troca atômica se for igual ou carga atômica se não

6 atomic_fetch_add & atomic_fetch_add_explicit

Ele adiciona um valor não atômico a um objeto atômico e obtém o valor anterior do atômico

7 atomic_fetch_sub & atomic_fetch_sub_explicit

Ele subtrai um valor não atômico de um objeto atômico e obtém o valor anterior do atômico

8 atomic_fetch_and & atomic_fetch_and_explicit

Ele substitui o objeto atômico com o resultado de AND lógico por um argumento não atômico e obtém o valor anterior do atômico

9 atomic_fetch_or & atomic_fetch_or_explicit

Ele substitui o objeto atômico com o resultado do OR lógico por um argumento não atômico e obtém o valor anterior do atômico

10 atomic_fetch_xor & atomic_fetch_xor_explicit

Ele substitui o objeto atômico com o resultado do XOR lógico por um argumento não atômico e obtém o valor anterior do atômico

Tipo de bandeira e operações

Sr. Não. Tipo de bandeira e definição
1 atomic_flag

O tipo atômico booleano sem bloqueio

2 atomic_flag_test_and_set & atomic_flag_test_and_set_explicit

Ele define atomicamente o sinalizador como verdadeiro e retorna seu valor anterior

3 atomic_flag_clear & atomic_flag_clear_explicit

Ele define atomicamente o valor do sinalizador como falso