std::jthread::join
De cppreference.com
<tbody>
</tbody>
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.
Parámetros
(Ninguno)
Valor de retorno
(Ninguno)
Poscondiciones
joinable() es false
Excepciones
std::system_error si ocurre un error.
Condiciones de error
- std::errc si
this->get_id() == std::this_thread::get_id()(bloqueo detectado) - std::errc si el hilo no es válido
- std::errc si joinable() es
false
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!
Referencias
- El estándar C++20 (ISO/IEC 14882:2020):
- 32.4.3.2 Members [thread.jthread.mem]
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
| |