Compartir a través de


<atomic>

Define clases y clases de plantilla para utilizar para crear los tipos que las operaciones atómicas admiten.

#include <atomic>

Comentarios

[!NOTA]

En el código compilado utilizando /clr o /clr:pure, este encabezado está bloqueado.

Una operación atómica tiene dos propiedades de clave que le ayudan a varios subprocesos de uso correctamente a manipular un objeto sin utilizar la exclusión mutua se bloqueen.

  • Dado que una operación atómica es indivisible, una segunda operación atómica en el mismo objeto desde un subproceso diferente puede obtener el estado de objeto antes o después de la primera operación atómica.

  • Por su argumento memory_order , una operación atómica establece ordenar los requisitos para la visibilidad de los efectos de otras operaciones atómicas en el mismo subproceso.Por consiguiente, deshabilita las optimizaciones del compilador que cumplen los requisitos de ordenación.

En algunas plataformas, no sería posible implementar eficazmente las operaciones atómicas para algunos tipos sin utilizar mutex bloqueos.Un tipo atómico es bloqueo- libre si ninguna operaciones atómicas en ese uso de tipo bloqueos.

La clase atomic_flag proporciona un tipo atómico mínimo que contiene un indicador bool .Las operaciones son siempre bloqueo- disponibles.

La clase de plantilla atomic<Ty> almacena un objeto del tipo Ty de argumentos y proporciona acceso atómico que valor almacenado.Puede crear instancias mediante cualquier tipo que se pueden copiar mediante memcpy y comprobar la igualdad mediante memcmp.En particular, puede utilizarlo con tipos definidos por el usuario que cumplen estos requisitos y, en muchos casos, con los tipos de punto flotante.

La plantilla también tiene un conjunto de especializaciones de tipos enteros y de una especialización parcial para punteros.Estas especializaciones proporcionan operaciones adicionales que no están disponibles a través de la plantilla principal.

Especializaciones de puntero

Especializaciones parciales atomic<Ty *> se aplican a todos los tipos de puntero.Proporcionan métodos para la aritmética con punteros.

Especializaciones completas

Especializaciones atomic<integral> se aplican a todos los tipos enteros.Proporcionan operaciones adicionales que no están disponibles a través de la plantilla principal.

Cada tipo atomic<integral> tiene una macro correspondiente que puede utilizar en if directive para determinar en tiempo de compilación si las operaciones en ese tipo son bloqueo- disponibles.Si el valor de la macro es cero, las operaciones en el tipo no son bloqueo- disponibles.Si el valor es 1, las operaciones podrían ser bloqueo- libres, y se requiere una comprobación en tiempo de ejecución.Si el valor es 2, las operaciones son bloqueo- disponibles.Puede utilizar la función atomic_is_lock_free para determinar en tiempo de ejecución si las operaciones en el tipo son bloqueo- disponibles.

Para cada uno de los tipos enteros, hay un tipo atómico denominado correspondiente que administra un objeto de ese tipo entero.Cada tipo atomic_integral tiene el mismo conjunto de funciones miembro que la instancia correspondiente atomic<Ty> y puede pasarse a funciones atómicas de no un miembro de los.

Tipo atomic_integral.

Tipo entero

Macro deatomic_is_lock_free

atomic_char

char

ATOMIC_CHAR_LOCK_FREE

atomic_schar

signed char

ATOMIC_CHAR_LOCK_FREE

atomic_uchar

unsigned char

ATOMIC_CHAR_LOCK_FREE

atomic_char16_t

char16_t

ATOMIC_CHAR16_T_LOCK_FREE

atomic_char32_t

char32_t

ATOMIC_CHAR32_T_LOCK_FREE

atomic_wchar_t

wchar_t

ATOMIC_WCHAR_T_LOCK_FREE

atomic_short

short

ATOMIC_SHORT_LOCK_FREE

atomic_ushort

unsigned short

ATOMIC_SHORT_LOCK_FREE

atomic_int

int

ATOMIC_INT_LOCK_FREE

atomic_uint

unsigned int

ATOMIC_INT_LOCK_FREE

atomic_long

long

ATOMIC_LONG_LOCK_FREE

atomic_ulong

unsigned long

ATOMIC_LONG_LOCK_FREE

atomic_llong

long long

ATOMIC_LLONG_LOCK_FREE

atomic_ullong

unsigned long long

ATOMIC_LLONG_LOCK_FREE

Los nombres de Typedef existen para las especializaciones de plantilla atómica para algunos de los tipos definidos en el encabezado <inttypes.h>.

Tipo atómico

Nombre de Typedef

atomic_int8_t

atomic<int8_t>

atomic_uint8_t

atomic<uint8_t>

atomic_int16_t

atomic<int16_t>

atomic_uint16_t

atomic<uint16_t>

atomic_int32_t

atomic<int32_t>

atomic_uint32_t

atomic<uint32_t>

atomic_int64_t

atomic<int64_t>

atomic_uint64_t

atomic<uint64_t>

atomic_int_least8_t

atomic<int_least8_t>

atomic_uint_least8_t

atomic<uint_least8_t>

atomic_int_least16_t

atomic<int_least16_t>

atomic_uint_least16_t

atomic<uint_least16_t>

atomic_int_least32_t

atomic<int_least32_t>

atomic_uint_least32_t

atomic<uint_least32_t>

atomic_int_least64_t

atomic<int_least64_t>

atomic_uint_least64_t

atomic<uint_least64_t>

atomic_int_fast8_t

atomic<int_fast8_t>

atomic_uint_fast8_t

atomic<uint_fast8_t>

atomic_int_fast16_t

atomic<int_fast16_t>

atomic_uint_fast16_

atomic<uint_fast16_t>

atomic_int_fast32_t

atomic<int_fast32_t>

atomic_uint_fast32_t

atomic<uint_fast32_t>

atomic_int_fast64_t

atomic<int_fast64_t>

atomic_uint_fast64_t

atomic<uint_fast64_t>

atomic_intptr_t

atomic<intptr_t>

atomic_uintptr_t

atomic<uintptr_t>

atomic_size_t

atomic<size_t>

atomic_ptrdiff_t

atomic<ptrdiff_t>

atomic_intmax_t

atomic<intmax_t>

atomic_uintmax_t

atomic<uintmax_t>

Structs

Nombre

Descripción

estructura atómica

Describe un objeto que realiza operaciones atómicas en un valor almacenado.

estructura de atomic_flag

Describe un objeto que atómico conjuntos y borren un indicador bool .

Enumeraciones

Nombre

Descripción

memory_order Enum

Nombres simbólicos de fuentes para operaciones de sincronización en ubicaciones de memoria.Estas operaciones afectan a cómo las asignaciones en un subproceso se hacen visibles en otro.

Funciones

En la lista siguiente, funciones que no finalizan en _explicit tienen la semántica _explicitcorrespondiente, salvo que las tienen los argumentos implícitos memory_ordermemory_order_seq_cst.

Nombre

Descripción

función de atomic_compare_exchange_strong

Realiza un atómico comparan e intercambian la operación.

función atomic_compare_exchange_strong_explicit

Realiza un atómico comparan e intercambian la operación.

función de atomic_compare_exchange_weak

Realiza un atómico débil comparan e intercambian la operación.

función atomic_compare_exchange_weak_explicit

Realiza un atómico débil comparan e intercambian la operación.

atomic_exchange (Función)

Reemplaza un valor almacenado.

función atomic_exchange_explicit

Reemplaza un valor almacenado.

atomic_fetch_add (Función)

Agrega un valor especificado con el valor almacenado existente.

función atomic_fetch_add_explicit

Agrega un valor especificado con el valor almacenado existente.

atomic_fetch_and (Función)

Realiza and bit a bit en un valor especificado y un valor almacenado existente.

función atomic_fetch_and_explicit

Realiza and bit a bit en un valor especificado y un valor almacenado existente.

atomic_fetch_or (Función)

Realiza or bit a bit en un valor especificado y un valor almacenado existente.

función atomic_fetch_or_explicit

Realiza or bit a bit en un valor especificado y un valor almacenado existente.

atomic_fetch_sub (Función)

Resta un valor especificado de un valor almacenado existente.

función atomic_fetch_sub_explicit

Resta un valor especificado de un valor almacenado existente.

atomic_fetch_xor (Función)

Realiza exclusive or bit a bit en un valor especificado y un valor almacenado existente.

función atomic_fetch_xor_explicit

Realiza exclusive or bit a bit en un valor especificado y un valor almacenado existente.

función atomic_flag_clear

Establece la marca en un objeto atomic_flag a false.

función atomic_flag_clear_explicit

Establece la marca en un objeto atomic_flag a false.

función de atomic_flag_test_and_set

Establece la marca en un objeto atomic_flag a true.

función atomic_flag_test_and_set_explicit

Establece la marca en un objeto atomic_flag a true.

función de atomic_init

Establece el valor almacenado en un objeto atomic .

atomic_is_lock_free (Función)

Especifica si las operaciones atómicas en un objeto especificado son bloqueo- disponibles.

función de atomic_load

Atómico recupera un valor.

función atomic_load_explicit

Atómico recupera un valor.

atomic_signal_fence Function

Actúa como barrera que establezca la memoria que solicita requisitos entre las barreras en un subproceso de la llamada que tiene los controladores señalado ejecutados en el mismo subproceso.

función de atomic_store

Atómico almacena un valor.

función atomic_store_explicit

Atómico almacena un valor.

atomic_thread_fence Function

Actúa como barrera que establezca la memoria que solicita requisitos con respecto a otras barreras.

función de kill_dependency

Divide una cadena posible de la dependencia.

Vea también

Referencia

Biblioteca de plantillas estándar

Otros recursos

Archivos de encabezado