¿Por qué .join sigue siendo necesario cuando todos los otros hilos han terminado antes del hilo principal?
Aprendizaje C ++ multi-threading.
En mi ejemplo, hilohelper1
yhelper2
haber terminado de ejecutar antes de lamain
hilo terminado. Sin embargo, el programa se bloquea. Yo específicamente, saqué.join()
declaraciones, para ver cómo se comportaría el programa, sin esperar errores, ya quemain()
llamadasstd::terminate
después de que otros dos hilos hayan terminado.
void foo()
{
// simulate expensive operation
std::this_thread::sleep_for(std::chrono::seconds(5));
std::cout << "t1\n";
}
void bar()
{
// simulate expensive operation
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "t2\n";
}
int main()
{
std::cout << "starting first helper...\n";
std::thread helper1(foo);
std::cout << "starting second helper...\n";
std::thread helper2(bar);
std::this_thread::sleep_for(std::chrono::seconds(10));
std::cout << "waiting for helpers to finish..." << std::endl;
//helper1.join();
//helper2.join();
std::cout << "done!\n";
}