Wird ein boost :: thread automatisch aus einer boost :: thread_group entfernt, wenn es beendet wird?

9

( Diese Frage , obwohl ähnlich, hat meine Frage nicht wirklich beantwortet.)

Ich hatte Probleme mit meinem eigenen " Thread-Gruppe "Implementierung , und näher an der Lösung oder sogar die Identifizierung des Problems, ich bin nur in der Verwendung von boost::thread_grp suchen.

Nun, aus welcher Dokumentation kann ich weiterlesen Das Thema 1 habe ich immer geglaubt, dass Thread-Objekte - egal wie lange ihre eigentliche Arbeit dauert - am Leben bleiben und Teil einer Thread-Gruppe bleiben, bis die Thread-Gruppe zerstört ist.

Ein oberflächlicher Test scheint jedoch darauf hinzuweisen, dass boost::thread_group::size() alleine abnimmt, da Threads ihre Arbeit verrichten und abbrechen. Das würde bedeuten, dass die Thread-Objekte selbst auch für mich aufgeräumt werden.

Stimmt das? Kann ich mich darauf verlassen?

%Vor%

Wenn ja, dann war meine gesamte ursprüngliche has_threads -Implementierung nur ein kaputter Klon und ich habe meine Zeit verschwendet. :)

Und, ja, assert war eine wirklich schlechte Wahl für dieses Snippet, da ich denke, dass es dazu führen könnte, dass irgendwelche unwahrscheinlichen Threads den Speicher unter dem, was count war, abschlachten. Egal, egal.

1 - Ich stehe auf Boost 1.40, aber die Dokumentation zu diesem Thema scheint für neuere Versionen die gleiche zu sein.

Aktualisieren

Dieser Thread ist ein Beispiel dafür, wo Menschen sind Ich sage das Gegenteil von dem, was meine Tests gezeigt haben. Es bietet auch eine anständige Lösung, wenn das der Fall ist, obwohl; Es ist nett, dass thread_group völlig Thread-sicher ist (obwohl ich nicht überzeugt bin, dass shared_ptr::get() Thread-sicher ist; was ist, wenn der Thread endet, bevor shared_ptr::reset fertig ist?). Muss ich diese Lösung anwenden?

    
Lightness Races in Orbit 25.02.2012, 21:07
quelle

1 Antwort

4

Nein, ich habe die Ergebnisse meines Tests falsch interpretiert, indem ich den Taskplaner, der Threads für mich erstellt, nicht abstrahiere. Kurz gesagt, ich habe size() auf die falsche boost::thread_group überprüft.

Tatsächlich geht boost::thread_group::size() nicht selbständig, da die Threads enden, also verwende ich eine angepasste Version der Lösung, die in dem Forenbeitrag zur Verfügung gestellt wurde, mit dem ich im Fragenupdate verlinkt bin.

    
Lightness Races in Orbit 25.02.2012, 21:52
quelle