web-dev-qa-db-ja.com

shared_timed_mutexがc ++ 14で定義されているのに、shared_mutexがc ++ 17で定義されているのはなぜですか?

C++ 11では、std::mutexとその拡張バージョン-std::timed_mutexが導入されました。

ただし、c ++ 14にはstd::shared_timed_mutexがありますが、その「親」であるstd::shared_mutexはc ++ 17に追加されます。

そのための合理的な説明はありますか?

std::shared_timed_mutexの「時限」機能を使用しない場合、提案されたstd::shared_mutexよりも悪くなりますか(遅くなり、より多くのリソースを消費します)?

27
peku33

共有ミューテックスには元々タイミングがあり、shared_mutexと呼ばれていました。

実装者(msvc iirc)は、タイミングなしで「より安価に」実装できると述べました。特に、SRWLOCKは、共有ミューテックスを実装するのに十分なWindows上の既存のプリミティブですが、timedには追加の機械が必要です。 (@t.c。経由)。 (ただし、すでに記述されているため、簡単であるだけでなく、少なくともx86/64ウィンドウでは基本的に高価であると思います)

標準に新しいタイプを追加するには遅すぎましたが、名前を変更するには遅すぎませんでした。

そのため、名前がshared_timed_mutexに変更され、次の標準で時間制限のないバージョンが追加されました。

ここ は名前の変更に関係する論文の少なくとも1つです。

Shared_mutexの名前をshared_timed_mutexに変更することを提案します。

(a)他のミューテックスとの一貫性(名前の不一致の修正)。

(b)一部のプラットフォームではshared_timed_mutexよりも効率的なshared_mutexの余地を残す。