Leo*_*Hat 3 c++ inheritance mutex locking critical-section
在我编写或评论的大多数代码中,锁定是通过组合实现的,其中一个类拥有一个关键部分或互斥锁:
class MyClass
{
Mutex mMutex;
};
Run Code Online (Sandbox Code Playgroud)
当可以通过多个线程访问可变成员时,我们通过RAII获取并释放锁,如下所示:
void MyClass::Method()
{
Lock lock(mMutex);
// ...
}
Run Code Online (Sandbox Code Playgroud)
今天我回顾了一些代码通过继承实现锁定的代码,如下所示:
class MyClass : public Mutex
{
// ...
};
Run Code Online (Sandbox Code Playgroud)
锁定由类锁定"本身"执行:
void MyClass::Method()
{
Lock lock(this);
// ...
}
Run Code Online (Sandbox Code Playgroud)
这种方法有什么优点或缺点吗?或者这只是一个风格问题?
这几乎没有意义.是MyClass某种扩展同步对象的Mutex?如果没有,那么继承几乎可以肯定是错误的选择,因为它没有任何意义使用MyClass的Mutex(关系MyClass到Mutex是不是"是"的关系).
这也很危险:
MyClass x;
Lock lock(x);
x.Method(); // uh oh.
Run Code Online (Sandbox Code Playgroud)