Wie ich es verstehe, planen die üblichen Implementierungen von std :: async diese Jobs auf Threads aus einem zuvor zugewiesenen Thread-Pool.Können lang-laufende std :: asyncs andere std :: asyncs verhungern?
Also lassen Sie mich sagen, ich zuerst erstellen und planen Sie lange genug std::async
s, um alle Threads aus diesem Thread-Pool besetzt zu halten. Direkt danach (kurz bevor sie fertig sind) erstelle ich auch einige kurzlaufende std::async
s. Kann es passieren, dass die Kurzläufer überhaupt nicht ausgeführt werden, bis mindestens einer der Langläufer beendet ist? Oder gibt es eine Garantie im Standard (speziell C++ 11), die diese Art von Situation verhindert (wie das Erzeugen von mehr Threads, so dass das OS sie in einem Round-Robin-Modus planen kann)?
Es ist abhängig von der Implementierung. Fragen Sie nach dem C++ - Standard oder einer bestimmten Implementierung? –
Idealerweise hätte ich gerne eine Garantie vom Standard. Aber da Sie zu sagen scheinen, dass es keine solche Garantie gibt, bin ich speziell an dem Verhalten von GCC's libstdC++ interessiert (GCC 5.4, wenn das wichtig ist). – Dreamer