std::lock_guard
和 std::unique_lock
接口(interface)在它们的公共(public)部分(构造函数和析构函数)中看起来非常相似。
为什么它们之间没有层级关系?
最佳答案
它们具有不可替代的语义:
lock_guard
保证在其整个生命周期内被锁定。
unique_lock
不保证,因此它不遵循“IS A”规则(unique_lock
不能是 lock_guard
,因为它提供更少的保证)。
基于 lock_guard
实现 unique_lock
也并非易事(甚至可能是不可能的)。
显然反过来也是如此:虽然您可以根据 unique_lock
(私有(private)继承)实现 lock_guard
,lock_guard
不提供与 unique_lock
相同的功能 (lock()/unlock()
),因此不能公开派生自它。
关于c++ - 为什么 std::unique_lock 不是从 std::lock_guard 派生的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31177674/