Biblioteca C ++ - <atómica>

Introducción

Estos son tipos que encapsulan un valor cuyo acceso está garantizado para no causar carreras de datos y se pueden usar para sincronizar los accesos a la memoria entre diferentes subprocesos y la biblioteca atómica proporciona componentes para operaciones atómicas detalladas que permiten la programación concurrente sin bloqueo. Cada operación atómica es indivisible con respecto a cualquier otra operación atómica que involucre el mismo objeto.

Tipo atómico

No Señor. Tipos de miembros y definición
1 atómico

Plantilla de clase atómica y especializaciones para tipos bool, integral y puntero

Tipos atómicos de estilo C

Los siguientes son tipos atómicos y también se definen en este encabezado.

atómica para tipos integrales fundamentales .

Estos son typedefs de la correspondiente especialización completa del atómico plantilla de clase o una clase base de dicha especialización.

atómicas para integrales basadas en ancho (las definidas en<cinttypes>).

Cada uno de estos es un alias de uno de los atómicos anteriores para tipos integrales fundamentales o de una especialización completa delatómicoplantilla de clase con un tipo integral extendido .

Donde N es uno en 8, 16, 32, 64 o cualquier otro ancho de tipo admitido por la biblioteca.

tipo contenido tipo atómico descripción
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_leastnorte_t atomic_int_leastnorte_t
uint_leastnorte_t atomic_uint_leastnorte_t
int_fastnorte_t atomic_int_fastnorte_t
uint_fastnorte_t atomic_uint_fastnorte_t
intptr_t atomic_intptr_t
uintptr_t atomic_uintptr_t
size_t tamaño_atómico_t
ptrdiff_t atomic_ptrdiff_t

Operaciones sobre tipos atómicos

Y
No Señor. Operaciones y definición
1 atomic_is_lock_free

Se utiliza para comprobar si las operaciones del tipo atómico están libres de bloqueos.

2 atomic_store y atomic_store_explicit

Reemplaza automáticamente el valor del objeto atómico con un argumento no atómico

3 atomic_load y atomic_load_explicit

Obtiene atómicamente el valor almacenado en un objeto atómico

4 atomic_exchange y atomic_exchange_explicit

Reemplaza atómicamente el valor del objeto atómico con un argumento no atómico y devuelve el antiguo valor del objeto atómico.

5 atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_ strong & atomic_compare_exchange_ strong_explicit

Compara atómicamente el valor del objeto atómico con el argumento no atómico y realiza intercambio atómico si es igual o carga atómica si no

6 atomic_fetch_add & atomic_fetch_add_explicit

Agrega un valor no atómico a un objeto atómico y obtiene el valor anterior del atómico.

7 atomic_fetch_sub y atomic_fetch_sub_explicit

Resta un valor no atómico de un objeto atómico y obtiene el valor anterior del atómico.

8 atomic_fetch_and & atomic_fetch_and_explicit

Reemplaza el objeto atómico con el resultado de AND lógico con un argumento no atómico y obtiene el valor anterior de la atómica.

9 atomic_fetch_or & atomic_fetch_or_explicit

Reemplaza el objeto atómico con el resultado de la lógica OR con un argumento no atómico y obtiene el valor anterior de la atómica.

10 atomic_fetch_xor & atomic_fetch_xor_explicit

Reemplaza el objeto atómico con el resultado de XOR lógico con un argumento no atómico y obtiene el valor anterior de la atómica.

Tipo de bandera y operaciones

No Señor. Tipo de bandera y definición
1 bandera_atómica

El tipo atómico booleano sin bloqueo

2 atomic_flag_test_and_set & atomic_flag_test_and_set_explicit

Establece atómicamente la bandera en verdadero y devuelve su valor anterior

3 atomic_flag_clear y atomic_flag_clear_explicit

Establece atómicamente el valor de la bandera en falso