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";
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage