Es gibt immer warten & amp; benachrichtigen mit std::condition_variable
, zB :
Hinweis: val
stellt nicht unbedingt den Thread dar, der zuerst fertig war, da alle Threads ungefähr zur selben Zeit fertig sind und ein Überschreiben migh auftritt, aber nur für die Zwecke dieses Beispiels.
Nein, es gibt keine Wartezeiten für mehrere Objekte, die in der C ++ 11-Threading-Bibliothek äquivalent sind.
Wenn Sie auf den ersten einer Reihe von Vorgängen warten möchten, ziehen Sie in Erwägung, dass sie eine thread-sichere Warteschlange für Erzeuger und Verbraucher bereitstellen.
Hier ist ein Beitrag, den ich mit einem threaded_queue<T>
gemacht habe. Lassen Sie das Arbeitsprodukt Ihrer Threads an eine solche Warteschlange liefern. Lassen Sie den Verbraucher vom anderen Ende ablesen.
Jetzt kann jemand auf das Arbeitsprodukt mehrerer Threads gleichzeitig warten. Oder ein Thread. Oder ein GPU-Shader. Oder Arbeitsprodukt, das über eine REST-konforme Webschnittstelle geliefert wird. Es ist dir egal.
Die Threads selbst sollten von etwas wie einem Thread-Pool oder einer anderen Abstraktion höherer Ebene oberhalb von std::thread
verwaltet werden, da std::thread
eine schlechte Client-bezogene Threading-Abstraktion verursacht.
Ich würde std::optional
anstelle von boost::optional
in C ++ 17 verwenden. Es kann auch durch ein unique_ptr
oder eine Anzahl anderer Konstrukte ersetzt werden.
Es gibt keine Standardmethode, auf mehrere Threads zu warten.
Sie müssen auf betriebssystemspezifische Funktionen wie WaitForMultipleObjects
unter Windows zurückgreifen.
Ein Beispiel nur für Windows:
Komischerweise, wenn std::when_any
standardisiert wird, kann man eine Standard aber verschwenderische Lösung machen:
sehr verschwenderisch, immer noch nicht verfügbar, aber Standard.
Tags und Links c++ multithreading c++11