C ++ 11 kann einen Thread sicher verbinden, ohne einen try / catch-Block zu verwenden

Nach der DokumentationHier undHierwirft die Join-Methode eines C ++ 11-Threads astd::system_error objoinable() == false. Die natürliche Art, auf die Ausführung eines Threads zu warten, ist also:

if (thread2.joinable()) thread2.join();

Dies hat jedoch die Möglichkeit, einen std :: system_error auszulösen. Stellen Sie sich vor, Thread 1 ruft thread2.joinable () auf und gibt true zurück, um anzuzeigen, dass Thread2 noch ausgeführt wird. Anschließend hält der Scheduler Thread1 an und wechselt zwischen den Kontexten zu Thread 2. Thread 2 wird beendet und Thread 1 wird fortgesetzt. Thread 1 ruft thread2.join () auf, Thread2 ist jedoch bereits abgeschlossen, und daher wird std :: system_error ausgelöst.

Eine mögliche Lösung besteht darin, das Ganze in einen Try-Block zu packen:

try {
    thread2.join();
catch (std::system_error &e) {}

Aber dann, wenn ein legitimer std :: system_error ausgelöst wird, möglicherweise um anzuzeigen, dass der ThreadBeitritt fehlgeschlagenDas Programm geht weiter und tut so, als sei alles in Ordnung und gut. Gibt es eine gute Möglichkeit, einen Thread zu verbinden, außer einen Try / Catch-Block wie diesen zu verwenden?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage