为什么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
不提供与unique_lock
相同的功能(lock()/unlock()
),因此它不能从中公开派生
相关文章:
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- 为什么"weak.lock()"返回"nullptr" "auto weak=std::make_shared<int>(42);"的定义?
- DRD 报告"conflicting load" std::mutex::lock 上的错误
- 在 std::tie 中使用 std::weak_ptr::lock()
- std::lock_guard 怎么可能比 std::mutex::lock() 更快?
- std::mutex::lock() 产生奇怪(和不必要的)ASM 代码
- std::lock 仍然导致死锁
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 当我调用lock()时,为什么std :: mutex会引发异常
- 使用 std::lock (c++11) 的大量 CPU 负载
- std::lock() equivalent for boost::shared_mutex?
- 为什么在 std::lock 中没有超时支持
- “std::mutex”和“std::lock”是否保证处理器间代码中的内存同步
- std::weak_ptr:lock或shared_ptr构造函数
- std::mutex::lock可以抛出即使一切看起来"good"?
- std::weak_ptr.lock在多线程c++中的语义
- STD::Lock 的友元函数定义和替代提升函数
- 什么是更好的 std::lock_guard<std::mutex> lock(std::mutex mutex_var); 或 std::mutex mutex_var.lock();
- 尝试std::lock[_unique]和std::shared_mutex的线程是否会被调用std::lock_sha
- std::lock_guard<std::mutex> lock(m) 是否有简写?