std::launch::async ポリシーで std::async を起動すると、新しいスレッドですべての非同期タスクを開始するべきではありませんか? 現時点では、新しい非同期タスクが作業を完了したばかりのスレッドに移動しているように見えます。コンパイラとして VC11 を使用しています。新しいワーカー (ワーカーが ID 34500 のスレッドを複数回取得するなど) が std::async で起動されたときの出力からわかるように、以前に終了したスレッドで開始されます。std::async の私の理解は間違っていますか、それとも根本的な作業盗用キューまたはそのようなものがありますか?
Worker (ID=24072) starting.
Worker (ID=34500) starting.
Worker (ID=32292) starting.
Worker (ID=31392) starting.
Worker (ID=17976) starting.
Worker (ID=31580) starting.
Worker (ID=33512) starting.
Worker (ID=33804) starting.
Worker 32292 finished.
Worker (ID=32292) starting.
Worker 17976 finished.
Worker (ID=17976) starting.
Worker 31580 finished.
Worker (ID=31580) starting.
Worker 34500 finished.
Worker (ID=34500) starting.
Worker 34500 finished.
Worker (ID=34500) starting.
Worker 32292 finished.
Worker (ID=32292) starting.
Worker 17976 finished.
Worker (ID=17976) starting.
Worker 34500 finished.
Worker 17976 finished.
Worker 31580 finished.
Worker 32292 finished.
Worker 33804 finished.
Worker 31392 finished.
Worker 33512 finished.
Worker 24072 finished.