存在する理由について混乱していlock_guard
ます。それは...ですか:
unique_lock
?よりもシンプルなインターフェース- よりも優れた
unique_lock
パフォーマンス - 他の何か?
存在する理由について混乱していlock_guard
ます。それは...ですか:
unique_lock
?よりもシンプルなインターフェースunique_lock
パフォーマンスlock_guard
Mutex
ロックされた型へのポインタまたは参照という状態の 1 つの単位で実装できます。
unique_lock
はロックされていないを持つことができるため、その状態を保持することと、現在ロックされているかどうかを知る必要があります。これは、少なくとも余分な状態が必要であることを意味します。unique_lock
Mutex
bool
lock_guard
の取得と解放に関するゼロオーバーヘッド RAII ロック/ロック解除ラッパーを提供しますMutex
。基本的にlock_guard
は、RAII を使用して のロックを処理することを避ける理由がないことを意味しMutex
ます。
unique_lock
使用可能な方法でのみ使用することをコンパイラーが認識できる場合にのみ、オーバーヘッドをゼロにすることlock_guard
ができます (つまり、それを構築し、それをいじらずに破棄するなど)。
これらの効率の議論を超えて、a を見たプログラマーはlock_guard
、スコープ内のコードを調べる必要なく、スコープの終わりまで続くことを知っています。を見たプログラマーunique_lock
は、変数のすべての使用を調べて、これが事実であるかどうかを知る必要があります。
しかし、上記は理由の半分にすぎません。
もう 1 つの理由は、C++11 のスレッド ライブラリの多くがboost
、ほぼプラットフォームに依存しないスレッド ライブラリを既に実装しているライブラリに基づいていたためです。Boost には と の両方がlock_guard
ありunique_lock
、セマンティクスは C++11 バージョンとほぼ同じです。
そのため、スレッド化ライブラリが標準化されたときboost
、両方が導入され、誰もそれらを排除しませんでした。