futureとshared_futureの違いは何ですか? 質問する

futureとshared_futureの違いは何ですか? 質問する

futureとの違いは何ですかshared_future?の代わりに
を使用する必要があるのはどのような場合ですか?shared_futurefuture

私は C++11 のこれら 2 つの機能を対比する優れたドキュメントを探していましたが、Web 上で答え (少なくとも簡単で読みやすいもの) を見つけることができませんでした。

これが私が現在理解している違いです

  1. futureオブジェクトは に対して 1 回だけ照会できますget()
  2. shared_future何度でも問い合わせることができます。

使用例: 複数のスレッドが非同期タスクの結果に依存している場合は、 を使用する必要がありますshared_future。future オブジェクトを同じスレッドで複数回照会する必要がある場合は、代わりに を使用する必要がありますshared_future

さらに詳しい情報、注意点、一般的なガイドラインがあれば、ぜひお知らせください。

ベストアンサー1

これら 2 つの future 型の目的は、移動セマンティクス、移動専用型、および通常の関数から移動専用型を返す新しい C++11 機能に遡ります。

C++98/03 では、ファクトリ関数から型を返す場合:

A
make_A()
{
    A a;
    // ...
    return a;
}

Aあれば である必要がありましたCopyConstructible。そして、C++11 の新機能として、Aでない場合でもを返すことができCopyConstructible、 であればよいのですMoveConstructible

しかし、たとえば futures を使用して並行実行しようとするとどうなるでしょうか。の場合にmake_Aのみ並列化できるとしたら、それは犯罪ではないでしょうか。 1 つの最適化を諦めて、別の最適化を追い求めなければなりません。make_AACopyConstructible

したがって、のみがfuture<R>必要です。ただし、保存された結果から移動しているため、これを取得できるのは 1 回だけです。RMoveConstructible

しかし、複数のスレッドで同じ結果を得ることも本当に必要です。 ではshared_future<R>それが可能になりますが、 が必要RになりますCopyConstructible

おすすめ記事