次のコードが安全に使用できるかどうか、もしそうでない場合は安全にすることができますか?移動して参照を追跡しますか?
{
ThreadState state = ThreadState::Running;
auto pair = std::make_pair(std::async([&state]()
{
state = ThreadState::Waiting;
}), std::move(state));
someVector.emplace(std::move(pair));
}
ラムダはstd::move
を実行した後、適切な参照を追跡するのでしょうか?国家の生涯は延長されるのだろうか?これを改善してラムダとその捕捉状態のペアを作成できますか?
は、これらの列挙型はありますか?あなたは何をしようとしているのですか?おそらくもっと良い方法がありますか? – Nim
@ニム私がやっていることの最小の例です。より良い方法がありますか? https://pastebin.com/embed_js/9DKguWeK –
これは正しいとは言えません。たとえば、テストに来たときに内部ループで完了した非同期タスクがない場合は、外部ループが再び実行され、タスク - 理論的には、必要なバッチサイズよりも多くのタスクを持つことができます。タスクを開始する内部ループの下に、それらのすべてが完了するのを待つ必要があります。これにより、多くてもスレッド数必要です.. – Nim