std::jthread::join
De cppreference.com
void join(); | (desde C++20) | |
Bloquea el hilo actual hasta que el hilo identificado por *this termine su ejecución.
La finalización del hilo identificado por *thisse sincroniza con el retorno exitoso correspondiente de join()
.
No se realiza ninguna sincronización en *this en sí. Al mismo tiempo, llamar a join() en el mismo objeto jthread desde múltiples hilos/subprocesos constituye una carrera de datos que da como resultado un comportamiento indefinido.
Contenido |
[editar]Parámetros
(Ninguno)
[editar]Valor de retorno
(Ninguno)
[editar]Poscondiciones
joinable() es false
[editar]Excepciones
std::system_error si ocurre un error.
[editar]Condiciones de error
- resource_deadlock_would_occur si this->get_id()==std::this_thread::get_id() (bloqueo detectado)
- no_such_process si el hilo no es válido
- invalid_argument si joinable() es false
[editar]Ejemplo
Ejecuta este código
#include <iostream>#include <thread>#include <chrono> void foo(){// simular una operación costosastd::this_thread::sleep_for(std::chrono::seconds(1));} void bar(){// simular una operación costosastd::this_thread::sleep_for(std::chrono::seconds(1));} int main(){std::cout<<"iniciando el primer auxiliar...\n";std::jthread helper1(foo); std::cout<<"iniciando el segundo auxiliar...\n";std::jthread helper2(bar); std::cout<<"esperando a que terminen los auxiliares..."<<std::endl; helper1.join(); helper2.join(); std::cout<<"listo!\n";}
Salida:
iniciando el primer auxiliar... iniciando el segundo auxiliar... esperando a que terminen los auxiliares... listo!
[editar]Referencias
- El estándar C++20 (ISO/IEC 14882:2020):
- 32.4.3.2 Members [thread.jthread.mem]
[editar]Véase también
Permite que el hilo se ejecute independientemente del identificador del hilo (función miembro pública de std::thread ) | |
Comprueba si el objeto representa a un hilo actualmente en ejecución o a la espera de recibir un join() (función miembro pública de std::thread ) | |
Documentación de C para thrd_join |