5
私はそのようなコードを持っているが:すべてのstd :: futuresが終了する前に関数から戻っても安全ですか?
int function()
{
std::vector<std::future<int>> futures;
for (const auto& elem : elements)
{
futures.push_back(std::async(&MyClass::foo, myClass, elem);
}
for (auto& f : futures)
{
const int x = f.get();
if (x != 0)
return x;
}
}
私は未完成の非同期呼び出しがあるときに関数から戻ることはできますか?私は1つの非ゼロ値だけに興味があります。すべての非同期呼び出しが終了するまで待機する必要がありますか?このコードは安全ですか?
「安全な」とはどういう意味ですか? –
クラッシュ、未定義の動作などを意味します。私はちょうど最初のゼロ以外の値を取得し、他のものを無視したい。私は自分のプログラムが常にそのように振舞うようにしたい。つまり、このコードには何らかの危険がありますか? 他の非同期呼び出しが終了し、先物の「ベクトル」が存在しないときに何が起きるのか分かりません。 – peter55555
プログラムに未定義の動作がありません。しかし、それは戻る前にすべての非同期操作の完了をブロックする可能性があります。 –