std::jthread:: join
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Observers | ||||
| Operations | ||||
|
jthread::join
|
||||
| Stop token handling | ||||
| Non-member functions | ||||
|
void
join
(
)
;
|
(desde C++20) | |
Bloquea el hilo actual hasta que el hilo identificado por * this finalice su ejecución.
La finalización del hilo identificado por
*
this
se sincroniza con
la correspondiente devolución exitosa de
join()
.
No se realiza ninguna sincronización en * this mismo. Llamar concurrentemente a join ( ) en el mismo objeto jthread desde múltiples hilos constituye una condición de carrera que resulta en comportamiento indefinido.
Contenidos |
Parámetros
(ninguno)
Valor de retorno
(ninguno)
Postcondiciones
joinable() es false .
Excepciones
std::system_error si ocurre un error.
Condiciones de error
- resource_deadlock_would_occur si this - > get_id ( ) == std:: this_thread :: get_id ( ) (deadlock detectado).
- no_such_process si el hilo no es válido.
- invalid_argument si joinable() es false .
Ejemplo
#include <chrono> #include <iostream> #include <thread> void foo() { // simular operación costosa std::this_thread::sleep_for(std::chrono::seconds(1)); } void bar() { // simular operación costosa std::this_thread::sleep_for(std::chrono::seconds(1)); } int main() { std::cout << "iniciando primer ayudante...\n"; std::jthread helper1(foo); std::cout << "iniciando segundo ayudante...\n"; std::jthread helper2(bar); std::cout << "esperando a que los ayudantes terminen..." << std::endl; helper1.join(); helper2.join(); std::cout << "¡hecho!\n"; }
Salida:
iniciando primer ayudante... iniciando segundo ayudante... esperando a que los ayudantes terminen... ¡hecho!
Referencias
- Estándar C++23 (ISO/IEC 14882:2024):
-
- 33.4.4.3 Miembros [thread.jthread.mem]
- Estándar C++20 (ISO/IEC 14882:2020):
-
- 32.4.3.2 Miembros [thread.jthread.mem]
Véase también
|
permite que el hilo se ejecute independientemente del manejador del hilo
(función miembro pública) |
|
|
comprueba si el hilo es joinable, es decir, potencialmente ejecutándose en contexto paralelo
(función miembro pública) |
|
|
Documentación C
para
thrd_join
|
|