Espacios de nombres
Variantes
Acciones

Biblioteca de apoyo de concurrencia (desde C++11)

De cppreference.com
< cpp
 
 
Biblioteca de apoyo de concurrencia
Hilos
(C++11)
(C++20)
Espacio de nombres this_thread
(C++11)
(C++11)
(C++11)
Cancelación cooperativa
Exclusión mutua
Gestión genérica de bloqueo
(C++11)
(C++11)
(C++11)
(C++11)
Variables de condición
(C++11)
Semáforos
Pestillos y barreras
(C++20)
(C++20)
Futuros
(C++11)
(C++11)
(C++11)
Recuperación segura
Punteros de riesgo
Tipos atómicos
(C++11)
(C++20)
Inicialización de tipos atómicos
(C++11)(en desuso en C++20)
(C++11)(en desuso en C++20)
Orden de memoria
Funciones independientes para operaciones atómicas
Funciones independientes para indicadores atómicos
 

C++ incluye apoyo integrado para hilos, operaciones atómicas, exclusión mutua, variables de condición y futuros.

Contenido

[editar]Hilos

Los hilos permiten a los programas ejecutar a lo largo de varios núcleos de procesador.

Definido en el archivo de encabezado <thread>
(C++11)
Gestiona un hilo/subproceso independiente.
(clase)[editar]
(C++20)
std::thread con soporte para unión y cancelación automática.
(clase)[editar]
Funciones que gestionan el hilo actual
Definido en el espacio de nombres this_thread
(C++11)
Sugiere a la implementación que reprograme la ejecución de hilos.
(función)[editar]
(C++11)
Devuelve el identificador de hilo/subproceso del hilo/subproceso actual.
(función)[editar]
(C++11)
Detiene la ejecución del hilo/subproceso actual por una duración de tiempo especificada.
(función)[editar]
Detiene la ejecución del hilo/subproceso actual hasta que ocurra un punto de tiempo especificado.
(función)[editar]

Cancelación cooperativa

Los componentes fuente de detención (stop source), token de detención (stop token) y devolución de llamada de detención (stop callback) se pueden utilizar para solicitar de forma asincrónica que una operación detenga su ejecución de manera oportuna, generalmente porque el resultado ya no es necesario. Este tipo de solicitud se denomina solicitud de detención (stop request).

Estos componentes especifican la semántica del acceso compartido a un estado de detención (stop state) . Cualquier objeto que modele cualquiera de estos componentes que hagan referencia al mismo estado de detención es una fuente de detención, un token de detención o una devolución de llamada de detención asociados, respectivamente.

Los conceptos stoppable-source, stoppable_token y stoppable-callback-for especifican la sintaxis requerida y la semántica del modelo de fuente de detención (stop source), token de detención (stop token) y devolución de llamada de detención (stop callback), respectivamente.

(desde C++26)

Están diseñados:

  • para cancelar cooperativamente la ejecución, como para std::jthread,
  • para interrumpir las funciones en espera de std::condition_variable_any,
  • para realizar la finalización detenida de una operación asincrónica creada por execution::connect,
(desde C++26)
  • o para una implementación de gestión de ejecución personalizada.

De hecho, ni siquiera necesitan usarse para “detener” nada, sino que pueden usarse, por ejemplo, para un disparador de invocación de funciones de un solo uso seguro para hilos.

Definido en el archivo de encabezado <stop_token>
Tipos token de detención
(C++20)
Una interfaz para consultar si se ha hecho una solicitud de cancelación de un std::jthread.
(clase)[editar]
Proporciona una interfaz de token de detención que indica que una detención nunca es posible ni solicitada.
(clase)[editar]
Un token de detención que hace referencia al estado de detención de su objeto std::inplace_stop_source asociado.
(clase)[editar]
Tipos fuente de detención
Clase que representa una solicitud para detener uno o más std::jthreads.
(clase)[editar]
Un ejemplar de stoppable-source que es el único propietario del estado de detención.
(clase)[editar]
Tipos devolución de llamada de detención
Una interfaz para registrar devoluciones de llamada al cancelar un std::jthread.
(plantilla de clase)[editar]
Una devolución de llamada de detención para std::inplace_stop_token.
(plantilla de clase)[editar]
Obtiene el tipo de devolución de llamada para un tipo token de detención determinado.
(plantilla de alias)[editar]
Conceptos
Especifica la interfaz básica de los tókenes de detención que permiten realizar consultas sobre solicitudes de detención y si la solicitud de detención es posible.
(concepto)[editar]
Especifica un token de detención que no permite detenerse.
(concepto)[editar]
Especifica que un tipo es una fábrica de tokens de detención asociados y se puede realizar una solicitud de detención sobre él.
(concepto solo de exposición)[editar]
Especifica una interfaz para registrar devoluciones de llamada con un tipo de token de detención determinado.
(concepto solo de exposición)[editar]
(desde C++20)

[editar]Acceso al tamaño de la caché

Definido en el archivo de encabezado <new>
Desplazamiento mínimo para evitar compartimiento falso (false sharing).
Desplazamiento máximo para promover compartimiento verdadero (true sharing).
(constante)[editar]

[editar]Operaciones atómicas

Estos componentes se proporcionan para operaciones atómicas de grano fino que permiten una programación concurrente sin bloqueos. Cada operación atómica es indivisible con respecto a cualquier otra operación atómica que involucre al mismo objeto. Los objetos atómicos están libres de carreras de datos.

Ni la macro _Atomic ni ninguna de las declaraciones de espacios de nombre globales que no sean macros se proporcionan en ningún encabezado de la biblioteca estándar de C++ que no sea <stdatomic.h>.

(desde C++23)
Definido en el archivo de encabezado <atomic>
Tipos atómicos
(C++11)
Plantilla de clase atómica y especializaciones para los tipos bool, enteros y tipos puntero.
(plantilla de clase)[editar]
(C++20)
Proporciona operaciones atómicas en objetos no atómicos.
(plantilla de clase)[editar]
Operaciones en tipos atómicos
Comprueba si las operaciones del tipo atómico son sin bloqueo.
(plantilla de función)[editar]
Sustituye atómicamente el valor del objeto atómico con el de un argumento no atómico.
(plantilla de función)[editar]
Obtiene atómicamente el valor almacenado en un objeto atómico.
(plantilla de función)[editar]
Reemplaza atómicamente el valor del objeto atómico con el del argumento no atómico y devuelve el valor anterior del objeto atómico.
(plantilla de función)[editar]
Compara atómicamente el valor del objeto atómico con el argumento no atómico y realiza un intercambio atómico si son iguales o una carga atómica si no lo son.
(plantilla de función)[editar]
Agrega un valor no atómico a un objeto atómico y obtiene el valor anterior del objeto atómico.
(plantilla de función)[editar]
Resta un valor no atómico de un objeto atómico y obtiene el valor anterior del objeto atómico.
(plantilla de función)[editar]
Reemplaza el objeto atómico con el resultado de la operación lógica AND con un argumento no atómico y obtiene el valor anterior del objeto atómico.
(plantilla de función)[editar]
Reemplaza el objeto atómico con el resultado de la operación lógica OR con un argumento no atómico y obtiene el valor anterior del objeto atómico.
(plantilla de función)[editar]
Reemplaza el objeto atómico con el resultado de la operación lógica XOR con un argumento no atómico y obtiene el valor anterior del objeto atómico.
(plantilla de función)[editar]
Reemplaza el objeto atómico con el resultado de std::max con un argumento no atómico y obtiene el valor anterior del atómico.
(plantilla de función)[editar]
Reemplaza el objeto atómico con el resultado de std::min con un argumento no atómico y obtiene el valor anterior del atómico.
(plantilla de función)[editar]
Bloquea el hilo/subproceso hasta que se reciba una notificación y el valor atómico cambie.
(plantilla de función)[editar]
Notifica a un hilo bloqueado en atomic_wait.
(plantilla de función)[editar]
Notifica a todos los hilos bloqueados en atomic_wait.
(plantilla de función)[editar]
Tipo indicador y operaciones
El tipo atómico booleano libre de bloqueo.
(clase)[editar]
Establece atómicamente la bandera a true y devuelve su valor anterior.
(función)[editar]
Establece atómicamente el valor de la bandera a false.
(función)[editar]
Devuelve atómicamente el valor de la bandera.
(función)[editar]
Bloquea el hilo/subproceso hasta que haya una notificación y la bandera cambie.
(función)[editar]
Notifica a un hilo bloqueado en atomic_flag_wait.
(función)[editar]
Notifica a todos los hilos bloqueados en atomic_flag_wait.
(función)[editar]
Inicialización
(C++11)(en desuso en C++20)
Inicialización no atómica de un objeto atómico construido por defecto.
(plantilla de función)[editar]
Inicialización por constante de una variable atómica de duración de almacenamiento estática.
(macro de función)[editar]
Inicializa una bandera std::atomic_flag a false.
(constante de macro)[editar]
Orden de sincronización de memoria
Define las restricciones del ordenamiento de memoria para la operación atómica dada.
(typedef)[editar]
Quita el objeto especificado del árbol de dependencias de std::memory_order_consume.
(plantilla de función)[editar]
Primitiva de sincronización de barrera genérica de memoria dependiente del orden.
(función)[editar]
Barrera entre un hilo y un controlador de señales ejecutados en el mismo hilo/subproceso.
(función)[editar]
Definido en el archivo de encabezado <stdatomic.h>
Macros de compatibilidad con C
(C++23)
Macro de compatibilidad tal que _Atomic(T) es idéntico a std::atomic<T>
(macro de función)[editar]

[editar]Exclusión mutua

Los algoritmos de exclusión mutua previenen que el acceso simultáneo de varios hilos a recursos compartidos. Esto previene carreras de datos y proporciona apoyo para la sincronización entre hilos.

Definido en el archivo de encabezado <mutex>
(C++11)
Proporciona servicios de exclusión mutua básicos.
(clase)[editar]
Proporciona un servicio de exclusión mutua que implementa bloqueo con un tiempo de espera.
(clase)[editar]
Proporciona un servicio de bloqueo mutuo que puede ser bloqueado recursivamente por el mismo hilo/subproceso.
(clase)[editar]
Proporciona un servicio de exclusión mutua que puede ser bloqueado recursivamente por el mismo hilo e implementa bloqueo con un tiempo de espera.
(clase)[editar]
Definido en el archivo de encabezado <shared_mutex>
Proporciona un servicio de exclusión mutua compartida.
(clase)[editar]
Proporciona un servicio de exclusión mutua compartida e implementa bloqueo con un tiempo de espera.
(clase)[editar]
Gestión genérica de mutex
Definido en el archivo de encabezado <mutex>
(C++11)
Implementa un envoltorio de propiedad de mutex estrictamente basado en un ámbito.
(plantilla de clase)[editar]
Envoltorio RAII que evita bloqueo mutuo para múltiples mutex.
(plantilla de clase)[editar]
Implementa un envoltorio de propiedad de mutex movible.
(plantilla de clase)[editar]
Implementa un envoltorio de propiedad de un mutex movible.
(plantilla de clase)[editar]
(C++11)(C++11)(C++11)
Constantes de etiqueta que se utilizan para la estrategia de bloqueo.
(constante)[editar]
Algoritmos de bloqueo genéricos
(C++11)
Intenta tomar posesión de los mutex mediante llamadas repetidas a try_lock.
(plantilla de función)[editar]
(C++11)
Bloquea los mutex especificados. Se bloquea si ninguno está disponible.
(plantilla de función)[editar]
Llamar una vez
(C++11)
Objeto auxiliar para asegurarse que call_once invoque la función una sola vez.
(clase)[editar]
(C++11)
Invoca una función una sola vez inclusive si se llama desde varios hilos.
(plantilla de función)[editar]

[editar]Variables de condición

Una variable de condición es una primitiva de sincronización que facilita que múltiples hilos puedan comunicarse entre sí. Permite que algunos hilos esperen (posiblemente con un tiempo máximo de espera) hasta que llegue la notificación de otro hilo para que puedan continuar. Una variable de condición siempre está asociada a un mutex.

Definido en el archivo de encabezado <condition_variable>
Proporciona una variable de condición asociada con un cerrojo único, std::unique_lock
(clase)[editar]
Proporciona una variable de condición asociada con cualquier tipo de cerrojo
(clase)[editar]
Programa una llamada a notify_all para que se invoque cuando este hilo haya finalizado por completo
(función)[editar]
(C++11)
Lista los posibles resultados de las esperas cronometradas en las variables de condición
(enum)[editar]

Semáforos

Un semáforo (semaphore) es una primitiva de sincronización de peso ligero utilizado para restringir el acceso concurrente a un recurso compartido. Cuando es posible usar ambos, un semáforo es más eficiente que una variable de condición.

Definido en el archivo de encabezado <semaphore>
Semáforo que modela un conteo de recurso no negativo.
(plantilla de clase)[editar]
Semáforo que tiene solamente dos estados.
(typedef)[editar]

Pestillos y barreras

Los pestillos (latches) y las barreras (barriers) son mecanismos de coordinación de hilos que permiten que cualquier número de hilos se bloqueen hasta que un número esperado de hilos llegue a la barrera. Los pestillos no pueden reutilizarse, mientras que las barreras pueden utilizarse repetidamente.

Definido en el archivo de encabezado <latch>
(C++20)
Barrera de hilos de un solo uso.
(clase)[editar]
Definido en el archivo de encabezado <barrier>
(C++20)
Barrera de hilos reutilizable.
(plantilla de clase)[editar]
(desde C++20)

[editar]Futuros

La biblioteca estándar proporciona servicios para la obtención de los valores que se devuelven y para atrapar las excepciones lanzadas por tareas asincrónas (es decir, las funciones puestas en marcha por hilos). Estos valores se comunican mediante un estado compartido, en el que las tareas asíncronas pueden escribir su valor de retorno o almacenar una excepción, la cual puede examinarse, esperar por ella, y de otra forma manipulada por otros hilos que mantienen ejemplares de std::future o std::shared_future que referencian ese estado compartido.

Definido en el archivo de encabezado <future>
(C++11)
Almacena un valor para recuperación asíncrona.
(plantilla de clase)[editar]
Empaqueta una función para almacenar su valor de retorno para la recuperación asíncrona.
(plantilla de clase)[editar]
(C++11)
Espera a un valor que se establece asíncronamente.
(plantilla de clase)[editar]
Espera a un valor (posiblemente referenciado por otros futuros) que se ha establecido asíncronamente.
(plantilla de clase)[editar]
(C++11)
Ejecuta una función asíncronamente (posiblemente en un nuevo hilo) y devuelve un std::future que contendrá el resultado.
(plantilla de función)[editar]
(C++11)
Especifica la política de lanzamiento de std::async.
(enum)[editar]
Especifica los resultados de esperas cronometradas realizadas en std::future y std::shared_future.
(enum)[editar]
Errores de futuros
Informa de un error relacionado con futuros o promesas.
(clase)[editar]
Identifica la categoría de error del futuro.
(función)[editar]
Identifica los códigos de error del futuro.
(enum)[editar]

Recuperación segura

Las técnicas de recuperación segura se utilizan con mayor frecuencia para resolver de manera directa las carreras de acceso y eliminación.

Mecanismo Leer-Copiar-Actualizar (Read-Copy-Update)
Definido en el archivo de encabezado <rcu>
Permite que un objeto sea protegido por RCU.
(plantilla de clase)[editar]
(C++26)
Proporciona regiones de protección RCU.
(clase)[editar]
Devuelve una referencia a un objeto de duración estática del tipo std::rcu_domain.
(función)[editar]
Se bloquea hasta que se desbloquee una región de protección en un dominio RCU.
(función)[editar]
Puede evaluar operaciones programadas en un dominio RCU y se bloquea hasta que se completen todas las evaluaciones anteriores.
(función)[editar]
(C++26)
Planifica la evaluación de una función específica en un dominio RCU, potencialmente asignando memoria e invocando evaluaciones planificadas.
(plantilla de función)[editar]
Punteros de riesgo
Definido en el archivo de encabezado <hazard_pointer>
Permite que un objeto sea protegible contra riesgos.
(plantilla de clase)[editar]
Puntero multilector de un solo escritor que puede ser propiedad de, como máximo, un hilo en cualquier momento.
(clase)[editar]
Construye un puntero de riesgo.
(función)[editar]
(desde C++26)

[editar]Véase también

Documentación de C para Biblioteca de apoyo de concurrencia
close