<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 |
---|---|
Describe un objeto que realiza operaciones atómicas en un valor almacenado. |
|
Describe un objeto que atómico conjuntos y borren un indicador bool . |
Enumeraciones
Nombre |
Descripción |
---|---|
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 |
---|---|
Realiza un atómico comparan e intercambian la operación. |
|
Realiza un atómico comparan e intercambian la operación. |
|
Realiza un atómico débil comparan e intercambian la operación. |
|
Realiza un atómico débil comparan e intercambian la operación. |
|
Reemplaza un valor almacenado. |
|
Reemplaza un valor almacenado. |
|
Agrega un valor especificado con el valor almacenado existente. |
|
Agrega un valor especificado con el valor almacenado existente. |
|
Realiza and bit a bit en un valor especificado y un valor almacenado existente. |
|
Realiza and bit a bit en un valor especificado y un valor almacenado existente. |
|
Realiza or bit a bit en un valor especificado y un valor almacenado existente. |
|
Realiza or bit a bit en un valor especificado y un valor almacenado existente. |
|
Resta un valor especificado de un valor almacenado existente. |
|
Resta un valor especificado de un valor almacenado existente. |
|
Realiza exclusive or bit a bit en un valor especificado y un valor almacenado existente. |
|
Realiza exclusive or bit a bit en un valor especificado y un valor almacenado existente. |
|
Establece la marca en un objeto atomic_flag a false. |
|
Establece la marca en un objeto atomic_flag a false. |
|
Establece la marca en un objeto atomic_flag a true. |
|
Establece la marca en un objeto atomic_flag a true. |
|
Establece el valor almacenado en un objeto atomic . |
|
Especifica si las operaciones atómicas en un objeto especificado son bloqueo- disponibles. |
|
Atómico recupera un valor. |
|
Atómico recupera un valor. |
|
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. |
|
Atómico almacena un valor. |
|
Atómico almacena un valor. |
|
Actúa como barrera que establezca la memoria que solicita requisitos con respecto a otras barreras. |
|
Divide una cadena posible de la dependencia. |
Vea también
Referencia
Biblioteca de plantillas estándar