Concurrency support library
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 |
|
(C11)
|
crea un hilo
(función) |
|
(C11)
|
comprueba si dos identificadores se refieren al mismo hilo
(función) |
|
(C11)
|
obtiene el identificador del hilo actual
(función) |
|
(C11)
|
suspende la ejecución del hilo llamante durante el período de tiempo dado
(función) |
|
(C11)
|
cede el segmento de tiempo actual
(función) |
|
(C11)
|
termina el hilo llamante
(función) |
|
(C11)
|
separa un hilo
(función) |
|
(C11)
|
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) |
|
|
(C11)
|
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 |
|
|
(C11)
|
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 |
|
|
(C11)
|
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) |
|
(C11)
|
inicializa un nuevo
atomic_flag
(macro constante) |
Orden de sincronización de memoria |
|
|
(C11)
|
define las restricciones de ordenamiento de memoria
(enum) |
|
(C11)
|
rompe una cadena de dependencia para
memory_order_consume
(macro de función) |
|
(C11)
|
primitiva de sincronización de barrera genérica dependiente del orden de memoria
(función) |
|
(C11)
|
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 |
|
(C11)
|
crea un mutex
(función) |
|
(C11)
|
bloquea hasta adquirir un mutex
(función) |
|
(C11)
|
bloquea hasta adquirir un mutex o se agota el tiempo
(función) |
|
(C11)
|
adquiere un mutex o retorna sin bloquear si ya está bloqueado
(función) |
|
(C11)
|
libera un mutex
(función) |
|
(C11)
|
destruye un mutex
(función) |
|
(C11)
(C11)
(C11)
|
define el tipo de un mutex
(enumeración) |
Ejecución única |
|
|
(C11)
|
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 |
|
(C11)
|
crea una variable de condición
(función) |
|
(C11)
|
desbloquea un hilo bloqueado en una variable de condición
(función) |
|
(C11)
|
desbloquea todos los hilos bloqueados en una variable de condición
(función) |
|
(C11)
|
bloquea en una variable de condición
(función) |
|
(C11)
|
bloquea en una variable de condición, con un tiempo de espera
(función) |
|
(C11)
|
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 |
|
(C11)
|
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) |
|
(C11)
|
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) |
|
(C11)
|
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_, otss_, 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_omemory_, 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 |