在我编写或查看的大多数代码中,锁定是通过组合实现的,其中一个类拥有一个临界区或互斥锁:
class MyClass
{
Mutex mMutex;
};
当可以通过多个线程访问可变成员时,我们通过 RAII 获取和释放锁,如下所示:
void MyClass::Method()
{
Lock lock(mMutex);
// ...
}
今天我回顾了一些通过继承实现锁定的代码,如下所示:
class MyClass : public Mutex
{
// ...
};
并且锁定由类锁定“本身”执行:
void MyClass::Method()
{
Lock lock(this);
// ...
}
这种方法有什么优点或缺点吗?或者这只是一个风格问题?