C++11: Was passiert, wenn Sie don ' T call join (), std::thread

Unten angegeben:

void test() 
{
  std::chrono::seconds dura( 20 );
  std::this_thread::sleep_for( dura );
}

int main()
{
  std::thread th1(test);
  std::chrono::seconds dura( 5 );
  std::this_thread::sleep_for( dura );
  return 0;
}

main beendet sich nach 5 Sekunden, was passieren wird th1 das noch ausführen?

Geht es weiter die Ausführung bis zur Fertigstellung, auch wenn die th1 thread-Objekt, das Sie definiert in main geht aus Umfang und zerstört wird?

Tut th1 setzt sich einfach dort, nachdem es fertig ist die Ausführung oder irgendwie wird aufgeräumt, wenn das Programm beendet wird?

Was ist, wenn der thread erstellt wurde, in eine Funktion, nicht main - hat der thread bleibt lange herum, bis das Programm beendet wird oder wenn die Funktion den Gültigkeitsbereich verlässt?

Ist es sicher einfach nicht nennen join für ein thread, wenn Sie wollen, irgendeine Art von timeout-Verhalten auf den thread?

Warum versuchst du es nicht?
Denn das ist keine zuverlässige Methode des Lernens über garantiert.
weder Fragen auf Stackoverflow ist. Durch das kompilieren und ausführen dieses 5-Linien-exmple, zumindest konnte er eine Spur finden. Es gibt nur eine Quelle von Garantien -- a-standard.
"weder-noch Fragen auf Stackoverflow ist" Nun, eine gute Antwort SO in meiner Stellungnahme zitiert eine zuverlässige Quelle (wie du hast). Nicht einmal der Standard selbst aber ist eine absolut zuverlässige Quelle, da es Mängel aufweist. Compiler-Anbieter werden oft abweichen von einer wörtlichen Auslegung z.B. einbinden von beschlussvorlagen der Mangel berichten. Wegen der Existenz von Undefiniertes Verhalten, ich denke, es ist keine gute Praxis, um zu erfahren, garantiert, indem Sie versuchen, Dinge aus.
Ich denke mir "warum versuchst du es nicht?" ist eine durchaus gültige Antwort, die Frage würde sich verbessern, wenn es zeigte sich der OP die Mühe gemacht hätte zu laufen einige Experimente bevor Sie Fragen. "Ich habe es versucht und mein Programm beendet wird, wird erwartet, dass?" ist eine bessere Frage als "was würde passieren, wenn ich dies getan habe?" Es ist nicht so, wir reden über das Essen ein paar unbekannte Beeren wachsen wild, C++11 Compiler sind frei verfügbar und laufen Experimente ist einfach und lehrreich.

InformationsquelleAutor kiki | 2014-12-10

Schreibe einen Kommentar