質問

私は何を理解しています std::async 次のパラメーターを使用します。

  • std::launch::async
  • std::launch::deferred

しかし、何が起こるか、 std::launch::async | std::launch::deferred?

役に立ちましたか?

解決

の打ち上げポリシー std::launch::async | std::launch::deferred 実装がポリシーを適用するかどうかを選択できることを意味します std::launch::async また std::launch::deferred. 。この選択は、呼び出しごとに異なる場合があり、すぐに決定されることはありません。

したがって、常にどちらか一方を選択する実装は合法です(これはGCCが行うことであり、常に延期されます)。 std::launch::async ある程度の制限に到達してから、 std::launch::deferred.

また、実装が後でまで選択を延期できることを意味します。つまり、実装は、延期および非同期タスクから目に見えて明確な効果を持つ呼び出しによって、または実行中のタスクの数が内部タスクの制限よりも少ないまで、その手が強制されるまで決定を下すのを待つことを意味します。これは何 Just :: Thread します。

決定を強制する機能は次のとおりです。 wait(), get(), wait_for(), wait_until(), 、および結果を参照する最後の将来のオブジェクトの破壊者。

他のヒント

ISO IEC 14882-2011のChaprer 30.6.8はそれを説明しています launch::async | launch::deferred 意味 implementations should defer invocation or the selection of the policy when no more concurrency can be effectively exploited (と同じ async それなし policy パラメーター)。

実際には、C ++ランタイムがそれぞれの新しいスレッドを開始することを意味します async 未使用のCPUコアがある限り。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top