質問をより詳しく説明する前に、回答は実装に依存していることに注意してください。私は主にlibstdC++について尋ねていますが、libC++についても聞きたいと思います。オペレーティングシステムはLinuxです。 std::promise
、std::packaged_task
、又はstd::asyn
機能のいずれかを - 結果は、非同期操作により設定されるまでstd :: futureスピンウェイトはありますか?
std::future
ブロックにwait()
又はget()
を呼び出します。結果の可用性は、共有状態によって伝達されます。これは基本的に原子的変数です。将来は、共有状態が約束(または非同期タスク)によって準備ができているとマークされるのを待ちます。この待機および通知は、futexシステムコールを介してlibstdC++で実装されています。フューテックスの性能が高いことを前提に、将来が非常に短い期間(1マイクロ秒のオーダ)だけ待つことが予想される状況では、短時間の間共有状態を回転させることによってパフォーマンスを向上させることができますフューテックスを待つ前に
:
// TODO Spin-wait first.
だから私の質問ではなく、次のさ:実際にスピンウェイトを実装する計画はありますか?もしそうなら、どのように期間を決めるのですか?さらに、これは、今後のポリシーを通じて最終的に指定できる機能の種類ですか?
実装の詳細です。それは、Linux上でmutexシステムコールが実際にフューテックスなので、Linuxでは関係ありませんと私は思う、 – AndyG
(それは、 。 – SergeyA
@ SergeyAまだ、futex呼び出しには数マイクロ秒かかりますが、回転は数ナノ秒にすぎません。私はそれが非常に特定のユースケースの最適化であることを認識しています。 –