<atomic>

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

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

#include <atomic>  

System_CAPS_ICON_note.jpg Nota

En el código que se compila con /CLR o /CLR: pure, este encabezado está bloqueado.

Una operación atómica tiene dos propiedades de clave que le ayudarán a utilizan varios subprocesos para manipular correctamente un objeto sin usar bloqueos de exclusión mutua.

  • 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 del objeto sólo antes o después de la primera operación atómica.

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

En algunas plataformas, no sería posible implementar eficientemente las operaciones atómicas para algunos tipos sin usar mutex bloqueos. Un tipo atómico sin bloqueo si ninguna operación atómica sobre ese tipo utiliza bloqueos.

C ++&11;: en controladores de señal puede realizar operaciones atómicas en un objeto obj si obj.is_lock_free() o atomic_is_lock_free(x) son true.

La clase atomic_flag proporciona un tipo atómico mínima que contiene un bool marca. Sus operaciones son siempre sin bloqueo.

La clase de plantilla atomic<T> almacena un objeto de su tipo de argumento T y proporciona acceso atómico a ese valor almacenado. Puede crear instancias de él mediante el uso de cualquier tipo que se pueda copiar mediante el uso de memcpy y probar la igualdad mediante memcmp. En concreto, usarla con tipos definidos por el usuario que cumplen estos requisitos y, en muchos casos, con tipos de punto flotante.

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

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

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

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

Para cada uno de los tipos enteros, hay un tipo atómico con nombre correspondiente que administra un objeto de ese tipo entero. Cada atomic_integral tipo tiene el mismo conjunto de funciones miembro que la instancia correspondiente de atomic<T> y se puede pasar a cualquiera de las funciones de miembro no atómicas.

Tipo atomic_integral.Tipo enteroatomic_is_lock_free(Macro)
atomic_charcharATOMIC_CHAR_LOCK_FREE
atomic_scharsigned charATOMIC_CHAR_LOCK_FREE
atomic_ucharunsigned charATOMIC_CHAR_LOCK_FREE
atomic_char16_tchar16_tATOMIC_CHAR16_T_LOCK_FREE
atomic_char32_tchar32_tATOMIC_CHAR32_T_LOCK_FREE
atomic_wchar_twchar_tATOMIC_WCHAR_T_LOCK_FREE
atomic_shortshortATOMIC_SHORT_LOCK_FREE
atomic_ushortunsigned shortATOMIC_SHORT_LOCK_FREE
atomic_intintATOMIC_INT_LOCK_FREE
atomic_uintunsigned intATOMIC_INT_LOCK_FREE
atomic_longlongATOMIC_LONG_LOCK_FREE
atomic_ulongunsigned longATOMIC_LONG_LOCK_FREE
atomic_llonglong longATOMIC_LLONG_LOCK_FREE
atomic_ullongunsigned long longATOMIC_LLONG_LOCK_FREE

Existen nombres de TypeDef para especializaciones de la plantilla atómica para algunos de los tipos que se definen en el encabezado <inttypes.h>.</inttypes.h>

Tipo atómicoNombre de TypeDef
atomic_int8_tatomic<int8_t>
atomic_uint8_tatomic<uint8_t>
atomic_int16_tatomic<int16_t>
atomic_uint16_tatomic<uint16_t>
atomic_int32_tatomic<int32_t>
atomic_uint32_tatomic<uint32_t>
atomic_int64_tatomic<int64_t>
atomic_uint64_tatomic<uint64_t>
atomic_int_least8_tatomic<int_least8_t>
atomic_uint_least8_tatomic<uint_least8_t>
atomic_int_least16_tatomic<int_least16_t>
atomic_uint_least16_tatomic<uint_least16_t>
atomic_int_least32_tatomic<int_least32_t>
atomic_uint_least32_tatomic<uint_least32_t>
atomic_int_least64_tatomic<int_least64_t>
atomic_uint_least64_tatomic<uint_least64_t>
atomic_int_fast8_tatomic<int_fast8_t>
atomic_uint_fast8_tatomic<uint_fast8_t>
atomic_int_fast16_tatomic<int_fast16_t>
atomic_uint_fast16_atomic<uint_fast16_t>
atomic_int_fast32_tatomic<int_fast32_t>
atomic_uint_fast32_tatomic<uint_fast32_t>
atomic_int_fast64_tatomic<int_fast64_t>
atomic_uint_fast64_tatomic<uint_fast64_t>
atomic_intptr_tatomic<intptr_t>
atomic_uintptr_tatomic<uintptr_t>
atomic_size_tatomic<size_t>
atomic_ptrdiff_tatomic<ptrdiff_t>
atomic_intmax_tatomic<intmax_t>
atomic_uintmax_tatomic<uintmax_t>
NombreDescripción
Atomic (estructura)Describe un objeto que realiza operaciones atómicas sobre un valor almacenado.
atomic_flag (estructura)Describe un objeto que establece y borra una marca bool de forma atómica.
NombreDescripción
memory_order (Enum)Proporciona nombres simbólicos para las operaciones de sincronización en ubicaciones de memoria. Estas operaciones afectan a cómo las asignaciones de un subproceso se hacen visibles en otro.

En la lista siguiente, las funciones que no terminan en _explicit tienen la semántica de los correspondientes _explicit, excepto en que tienen el implícita memory_order argumentos de memory_order_seq_cst.

NombreDescripción
atomic_compare_exchange_strong (función)Realiza una atómica de comparación e intercambio operación.
atomic_compare_exchange_strong_explicit (función)Realiza una atómica de comparación e intercambio operación.
atomic_compare_exchange_weak (función)Realiza una atómica débil comparar e intercambiar operación.
atomic_compare_exchange_weak_explicit (función)Realiza una atómica débil comparar e intercambiar operación.
atomic_exchange (función)Reemplaza un valor almacenado.
atomic_exchange_explicit (función)Reemplaza un valor almacenado.
atomic_fetch_add (función)Agrega un valor especificado a un valor almacenado existente.
atomic_fetch_add_explicit (función)Agrega un valor especificado a un valor almacenado existente.
atomic_fetch_and (función)Realiza un bit a bit and en un valor especificado y un valor almacenado existente.
atomic_fetch_and_explicit (función)Realiza un bit a bit and en un valor especificado y un valor almacenado existente.
atomic_fetch_or (función)Realiza un bit a bit or en un valor especificado y un valor almacenado existente.
atomic_fetch_or_explicit (función)Realiza un bit a bit or en un valor especificado y un valor almacenado existente.
atomic_fetch_sub (función)Resta un valor especificado de un valor almacenado existente.
atomic_fetch_sub_explicit (función)Resta un valor especificado de un valor almacenado existente.
atomic_fetch_xor (función)Realiza un bit a bit exclusive or en un valor especificado y un valor almacenado existente.
atomic_fetch_xor_explicit (función)Realiza un bit a bit exclusive or en un valor especificado y un valor almacenado existente.
atomic_flag_clear (función)Establece la marca de un atomic_flag objeto false.
atomic_flag_clear_explicit (función)Establece la marca de un atomic_flag objeto false.
atomic_flag_test_and_set (función)Establece la marca de un atomic_flag objeto true.
atomic_flag_test_and_set_explicit (función)Establece la marca de un atomic_flag objeto true.
atomic_init (función)Establece el valor almacenado un atomic objeto.
atomic_is_lock_free (función)Especifica si las operaciones atómicas en un objeto especificado son libres de bloqueo.
atomic_load (función)Recupera de forma atómica un valor.
atomic_load_explicit (función)Recupera de forma atómica un valor.
atomic_signal_fence (función)Actúa como un barrera que establece el orden de requisitos entre los límites de una llamada de subprocesos que la memoria tiene controladores de señal que se ejecutan en el mismo subproceso.
atomic_store (función)Almacena de forma atómica un valor.
atomic_store_explicit (función)Almacena de forma atómica un valor.
atomic_thread_fence (función)Actúa como un barrera que establece los requisitos con respecto a otras barreras de ordenación de memoria.
kill_dependency (función)Divide una cadena de dependencia posibles.

Referencia de archivos de encabezado
Biblioteca de plantillas estándar

Mostrar: