Namespaces
Variants

Concurrency support library

From cppreference.net
< c

C++ incluye soporte incorporado para hilos, operaciones atómicas, exclusión mutua, variables de condición y almacenamientos específicos de hilo.

Estas características se proporcionan opcionalmente:

  • si la constante de macro __STDC_NO_THREADS__ está definida por el compilador, el encabezado <threads.h> y todos los nombres proporcionados en él no están disponibles;
  • si la constante de macro __STDC_NO_ATOMICS__ está definida por el compilador, el encabezado <stdatomic.h> y todos los nombres proporcionados en él no están disponibles.

Véase también _Atomic especificador de tipo y calificador .

Contenidos

Hilos

Definido en el encabezado <threads.h>
thrd_t tipo de objeto completo definido por la implementación que identifica un hilo
crea un hilo
(función)
comprueba si dos identificadores se refieren al mismo hilo
(función)
obtiene el identificador del hilo actual
(función)
suspende la ejecución del hilo llamante durante el período de tiempo dado
(función)
cede el segmento de tiempo actual
(función)
termina el hilo llamante
(función)
separa un hilo
(función)
bloquea hasta que un hilo termina
(función)
indica un estado de error del hilo
(constante)
thrd_start_t
(C11)
un typedef del tipo puntero a función int ( * ) ( void * ) , utilizado por thrd_create
(typedef)

Operaciones atómicas

Definido en el encabezado <stdatomic.h>
Operaciones sobre tipos atómicos
indica que el tipo atómico dado es libre de bloqueo
(constante macro)
indica si el objeto atómico está libre de bloqueo
(función)
almacena un valor en un objeto atómico
(función)
lee un valor de un objeto atómico
(función)
intercambia un valor con el valor de un objeto atómico
(función)
intercambia un valor con un objeto atómico si el valor antiguo coincide con lo esperado, de lo contrario lee el valor antiguo
(función)
suma atómica
(función)
resta atómica
(función)
OR atómico bit a bit
(función)
OR exclusivo atómico bit a bit
(función)
AND atómico bit a bit
(función)
Tipo de bandera y operaciones
bandera atómica booleana libre de bloqueo
(struct)
establece un atomic_flag a verdadero y devuelve el valor anterior
(función)
establece un atomic_flag a falso
(función)
Inicialización
inicializa un objeto atómico existente
(función)
(C11) (obsoleto en C17) (eliminado en C23)
inicializa un nuevo objeto atómico
(macro de función)
inicializa un nuevo atomic_flag
(macro constante)
Orden de sincronización de memoria
define las restricciones de ordenamiento de memoria
(enum)
rompe una cadena de dependencia para memory_order_consume
(macro de función)
primitiva de sincronización de barrera genérica dependiente del orden de memoria
(función)
barrera entre un hilo y un manejador de señales ejecutado en el mismo hilo
(función)
Alias de tipos de conveniencia
Nombre del typedef Nombre completo del tipo
atomic_bool (C11) _Atomic _Bool (hasta C23) _Atomic bool (desde C23)
atomic_char (C11) _Atomic char
atomic_schar (C11) _Atomic signed char
atomic_uchar (C11) _Atomic unsigned char
atomic_short (C11) _Atomic short
atomic_ushort (C11) _Atomic unsigned short
atomic_int (C11) _Atomic int
atomic_uint (C11) _Atomic unsigned int
atomic_long (C11) _Atomic long
atomic_ulong (C11) _Atomic unsigned long
atomic_llong (C11) _Atomic long long
atomic_ullong (C11) _Atomic unsigned long long
atomic_char8_t (C23) _Atomic char8_t
atomic_char16_t (C11) _Atomic char16_t
atomic_char32_t (C11) _Atomic char32_t
atomic_wchar_t (C11) _Atomic wchar_t
atomic_int_least8_t (C11) _Atomic int_least8_t
atomic_uint_least8_t (C11) _Atomic uint_least8_t
atomic_int_least16_t (C11) _Atomic int_least16_t
atomic_uint_least16_t (C11) _Atomic uint_least16_t
atomic_int_least32_t (C11) _Atomic int_least32_t
atomic_uint_least32_t (C11) _Atomic uint_least32_t
atomic_int_least64_t (C11) _Atomic int_least64_t
atomic_uint_least64_t (C11) _Atomic uint_least64_t
atomic_int_fast8_t (C11) _Atomic int_fast8_t
atomic_uint_fast8_t (C11) _Atomic uint_fast8_t
atomic_int_fast16_t (C11) _Atomic int_fast16_t
atomic_uint_fast16_t (C11) _Atomic uint_fast16_t
atomic_int_fast32_t (C11) _Atomic int_fast32_t
atomic_uint_fast32_t (C11) _Atomic uint_fast32_t
atomic_int_fast64_t (C11) _Atomic int_fast64_t
atomic_uint_fast64_t (C11) _Atomic uint_fast64_t
atomic_intptr_t (C11) _Atomic intptr_t
atomic_uintptr_t (C11) _Atomic uintptr_t
atomic_size_t (C11) _Atomic size_t
atomic_ptrdiff_t (C11) _Atomic ptrdiff_t
atomic_intmax_t (C11) _Atomic intmax_t
atomic_uintmax_t (C11) _Atomic uintmax_t

Exclusión mutua

Definido en el encabezado <threads.h>
mtx_t identificador de mutex
crea un mutex
(función)
bloquea hasta adquirir un mutex
(función)
bloquea hasta adquirir un mutex o se agota el tiempo
(función)
adquiere un mutex o retorna sin bloquear si ya está bloqueado
(función)
libera un mutex
(función)
destruye un mutex
(función)
define el tipo de un mutex
(enumeración)
Ejecución única
llama a una función exactamente una vez
(función)

Variables de condición

Definido en el encabezado <threads.h>
cnd_t identificador de variable de condición
crea una variable de condición
(función)
desbloquea un hilo bloqueado en una variable de condición
(función)
desbloquea todos los hilos bloqueados en una variable de condición
(función)
bloquea en una variable de condición
(función)
bloquea en una variable de condición, con un tiempo de espera
(función)
destruye una variable de condición
(función)

Almacenamiento local de hilo

Definido en el encabezado <threads.h>
(C11) (eliminado en C23)
macro de conveniencia para el especificador de clase de almacenamiento _Thread_local
(macro de palabra clave)
tss_t puntero de almacenamiento específico del hilo
número máximo de veces que se llaman los destructores
(constante macro)
tss_dtor_t
(C11)
tipo de puntero a función void ( * ) ( void * ) , utilizado para el destructor TSS
(typedef)
crea un puntero de almacenamiento específico del hilo con un destructor dado
(función)
(C11)
lee del almacenamiento específico del hilo
(función)
(C11)
escribe en el almacenamiento específico del hilo
(función)
libera los recursos mantenidos por un puntero específico del hilo dado
(función)

Identificadores reservados

En futuras revisiones del estándar C:

  • Los nombres de función, nombres de tipo y constantes de enumeración que comienzan con cnd_ , mtx_ , thrd_ , o tss_ , y una letra minúscula pueden añadirse a las declaraciones en el encabezado <threads.h> ;
  • Las macros que comienzan con ATOMIC_ y una letra mayúscula pueden añadirse a las macros definidas en el encabezado <stdatomic.h> ;
  • Los nombres de tipo definidos que comienzan con atomic_ o memory_ , y una letra minúscula pueden añadirse a las declaraciones en el encabezado <stdatomic.h> ;
  • Las constantes de enumeración que comienzan con memory_order_ y una letra minúscula pueden añadirse a la definición del tipo memory_order en el encabezado <stdatomic.h> ;
  • Los nombres de función que comienzan con atomic_ y una letra minúscula pueden añadirse a las declaraciones en el encabezado <stdatomic.h> .

Los identificadores reservados para nombres de funciones siempre están potencialmente (since C23) reservados para su uso como identificadores con enlace externo, mientras que otros identificadores listados aquí están potencialmente (since C23) reservados cuando se incluye <stdatomic.h> .

Declarar, definir, o #undef ese identificador resulta en comportamiento indefinido si es proporcionado por el estándar o la implementación (desde C23) . Los programas portables no deben usar esos identificadores.

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.17 Atomics <stdatomic.h> (p: TBD)
  • 7.26 Threads <threads.h> (p: TBD)
  • 7.31.8 Atomics <stdatomic.h> (p: TBD)
  • 7.31.15 Threads <threads.h> (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.17 Atomics <stdatomic.h> (p: 200-209)
  • 7.26 Threads <threads.h> (p: 274-283)
  • 7.31.8 Atomics <stdatomic.h> (p: 332)
  • 7.31.15 Threads <threads.h> (p: 333)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.17 Atomics <stdatomic.h> (p: 273-286)
  • 7.26 Threads <threads.h> (p: 376-387)
  • 7.31.8 Atomics <stdatomic.h> (p: 455-456)
  • 7.31.15 Threads <threads.h> (p: 456)

Véase también

Documentación de C++ para Biblioteca de soporte para concurrencia

Enlaces externos

Manual de GNU GCC Libc: Mutexes ISO C