/ / Wie kann ich sicherstellen, dass alle meine C ++ - Boost-Threads abgeschlossen sind, bevor das Programm beendet wird? - C ++, Multithreading, Boost

Wie kann ich sicherstellen, dass alle meine C ++ - Boost-Threads enden, bevor das Programm beendet wird? - C ++, Multithreading, Boost

Ich weiß, dass ich Thread anrufen kann.join (), um den Abschluss eines Threads zu erzwingen, bevor der aktuelle Thread fortgesetzt werden kann. Mein Programm enthält jedoch eine Reihe von Dateien, die in den Arbeitsspeicher eingelesen, geändert und dann auf die Festplatte geschrieben werden. Jedes Flush wird in einem separaten Thread ausgeführt, sodass der aktuelle Thread fortgesetzt werden kann, während der Inhalt auf die Festplatte geleert wird.

Ich konnte einen Satz aller erzeugten Threads behalten undFügen Sie sie dann am Ende der Ausführung des Hauptthreads hinzu. Wenn das Programm jedoch längere Zeit ausgeführt wird, könnte es eine große Anzahl von Flush-Threads geben, von denen die meisten trotzdem abgeschlossen sind.

Gibt es eine Möglichkeit, sich allen anzuschließen? aktiv Threads vor dem Fortfahren und Verlassen des Haupt-Threads?

Antworten:

4 für die Antwort № 1

Wenn die Threads ihre Ausführung abgeschlossen habenEs fängt eigentlich nicht mehr an. Ich sehe Ihre Bedenken nicht. Ich würde in Betracht ziehen, einen Thread-Pool zu verwenden. Wenn Sie eine Liste aller erzeugten Threads behalten möchten, verwenden Sie boost::thread_group. Und beitreten alle Threads sind im Wesentlichen und effektiv das Gleiche wie das Verbinden aller aktiv Threads seit dem Join auf einem Not-A-Thread werden sofort zurückgegeben. HTH