私が理解しているように、std :: asyncの通常の実装は、あらかじめ割り当てられたスレッドプールからのスレッドに対するこれらのジョブをスケジュールします。長時間実行可能なstd :: asyncは他のstd :: asyncを枯渇させることができますか?
だから、最初にスレッドプールを占有しているすべてのスレッドを占有するのに十分な長期実行型のメッセージを作成してスケジュールを設定しておきます(std::async
)。その後すぐに(彼らの実行が終わるまで)、私は短時間実行してstd::async
を作成してスケジュールします。長時間走っているものの少なくとも1つが終了するまで、短時間走っているものがまったく実行されないことが起こりうるか?あるいは、この種の状況を防ぐスタンダード(特にC++ 11)にいくつかの保証があります(OSがラウンドロビン方式でそれらをスケジューリングできるようにもっと多くのスレッドを生成するなど)?
実装に依存します。あなたは、C + +の標準またはいくつかの特定の実装について尋ねていますか? –
理想的には、標準からの保証が必要です。しかし、あなたにはそのような保証はないと言われているように、私は特にGCCのlibstdC++(GCC 5.4、それが重要である)の動作に興味があります。 – Dreamer