( 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.
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?
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.
Tags und Links c++ multithreading boost boost-thread