Web サイト cppreference.com から、「std::launch::async フラグと std::launch::deferred フラグの両方がポリシーで設定されている場合、非同期実行を実行するか遅延評価を実行するかは実装次第です。 "
「非同期実行または遅延評価を実行するかどうかの実装」を理解する方法.そして、両方にフラグを設定した場合、これは新しいスレッドで実行されるか、ローカルスレッドで遅延実行されますか?
Web サイト cppreference.com から、「std::launch::async フラグと std::launch::deferred フラグの両方がポリシーで設定されている場合、非同期実行を実行するか遅延評価を実行するかは実装次第です。 "
「非同期実行または遅延評価を実行するかどうかの実装」を理解する方法.そして、両方にフラグを設定した場合、これは新しいスレッドで実行されるか、ローカルスレッドで遅延実行されますか?
「非同期実行するか遅延評価するかの実装」をどう理解するか。
うーん、まさに仰る通り。両方のフラグが設定されている場合、実装は、新しい/別のスレッドで計算を開始するか ( に対応std::launch::async
)、または遅延評価を使用するか ( に対応std::launch::deferred
) を決定します。後者は、返された未来をクエリするまで計算を実行しないことを意味します。これによりstd::future::get
、std::future::wait
計算が「ローカル」スレッドで実行されます。
そして、両方にフラグを設定した場合、これは新しいスレッドで実行されますか、それともローカルスレッドで遅延実行されますか?
この場合、上で述べたように、何をすべきかを決定するのは実装次第であり、呼び出すたびに異なる可能性がありますstd::async(std::launch::async | std::launch::deferred, ...)
。
std::launch::async
両方を使用していて、どちらを使用std::launch::deferred
してもかまわないことを実装に伝えている場合。気にするなら、気にしないと言わないでください。必要なものを選択してください。