Espacios de nombres
Variantes

std::thread::join

De cppreference.com

[edit template]
 
 
Biblioteca de apoyo de concurrencia
Hilos
(C++11)
(C++20)
Espacio de nombres this_thread
(C++11)
(C++11)
(C++11)
Cancelación cooperativa
Exclusión mutua
(C++11)
Gestión genérica de bloqueo
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Variables de condición
(C++11)
Semáforos
Pestillos y barreras
(C++20)
(C++20)
Futuros
(C++11)
(C++11)
(C++11)
(C++11)
Recuperación segura
(C++26)
Punteros de riesgo
Tipos atómicos
(C++11)
(C++20)
Inicialización de tipos atómicos
(C++11)(en desuso en C++20)
(C++11)(en desuso en C++20)
Orden de memoria
Funciones independientes para operaciones atómicas
Funciones independientes para indicadores atómicos
 
 
<tbody> </tbody>
void join();
(desde C++11)

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 thread 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

#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::thread helper1(foo);

    std::cout << "iniciando el segundo auxiliar...\n";
    std::thread 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.2.5 Members [thread.thread.member]
  • El estándar C++17 (ISO/IEC 14882:2017):
  • 33.3.2.5 thread members [thread.thread.member]
  • El estándar C++14 (ISO/IEC 14882:2014):
  • 30.3.1.5 thread members [thread.thread.member]
  • El estándar C++11 (ISO/IEC 14882:2011):
  • 30.3.1.5 thread members [thread.thread.member]

Véase también

Permite que el hilo se ejecute independientemente del identificador del hilo
(función miembro pública) [editar]
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) [editar]
Documentación de C para thrd_join