为什么std :: unique_lock不是从std :: lock_guard派生的

时间:2015-07-02 07:04:40

标签: c++ c++11 language-design c++-standard-library

std::lock_guardstd::unique_lock接口在它们的共同部分(构造函数和析构函数)中看起来非常相似。

为什么他们之间没有等级关系?

1 个答案:

答案 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,因此无法从中公开派生。