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 *this se 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 costosa std::this_thread::sleep_for(std::chrono::seconds(1)); } void bar() { // simular una operación costosa std::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
|