Warum ist .join immer noch notwendig, wenn alle anderen Threads vor dem Haupt-Thread beendet wurden?
C ++ - Multithreading lernen.
In meinem Beispiel Threadhelper1
undhelper2
haben die Ausführung vor dem beendetmain
Thread beendet. Programm stürzt jedoch ab. Ich habe speziell herausgenommen.join()
Anweisungen, um zu sehen, wie sich das Programm verhalten würde, da keine Fehler zu erwarten sindmain()
Anrufestd::terminate
nachdem zwei andere Threads beendet sind.
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";
}