为什么 std::unique_lock 不是源自 std::lock_guard
Why is std::unique_lock not derived from std::lock_guard
std::lock_guard
和 std::unique_lock
接口在它们的公共部分(构造函数和析构函数)中看起来非常相似。
为什么它们之间没有等级关系?
它们具有不可替代的语义:
lock_guard
保证在其整个生命周期内被锁定。
unique_lock
不保证,因此它不遵循 "IS A" 规则(unique_lock
不能是 lock_guard
,因为它提供的保证较少)。
基于 lock_guard
实施 unique_lock
也并非易事(甚至可能是不可能的)。
显然反过来也是如此:虽然您可以根据 unique_lock
(私有继承)实现 lock_guard
,但 lock_guard
不提供相同的功能功能 (lock()/unlock()
) 与 unique_lock
相同,因此不能公开派生自它。
std::lock_guard
和 std::unique_lock
接口在它们的公共部分(构造函数和析构函数)中看起来非常相似。
为什么它们之间没有等级关系?
它们具有不可替代的语义:
lock_guard
保证在其整个生命周期内被锁定。
unique_lock
不保证,因此它不遵循 "IS A" 规则(unique_lock
不能是 lock_guard
,因为它提供的保证较少)。
基于 lock_guard
实施 unique_lock
也并非易事(甚至可能是不可能的)。
显然反过来也是如此:虽然您可以根据 unique_lock
(私有继承)实现 lock_guard
,但 lock_guard
不提供相同的功能功能 (lock()/unlock()
) 与 unique_lock
相同,因此不能公开派生自它。