std::lock_guard
和std::unique_lock
接口在它们的共同部分(构造函数和析构函数)中看起来非常相似。
为什么他们之间没有等级关系?
答案 0 :(得分:8)
它们具有不可替代的语义:
lock_guard
保证在其所有生命周期中都被锁定
unique_lock
并不保证,因此它不会遵循" IS A" -rule(unique_lock
不能是lock_guard
,因为它提供更少保证)。
因此,基于unique_lock
实施lock_guard
并不是微不足道的(甚至可能是不可能的)。
显然反过来也是如此:尽管你可以用lock_guard
(私有继承)来实现unique_lock
,但lock_guard
并不提供相同的功能功能(lock()/unlock()
)为unique_lock
,因此无法从中公开派生。