在我编写或审核的大多数代码中,锁定是通过组合实现的,其中一个类拥有关键部分或互斥量:
class MyClass
{
Mutex mMutex;
};
当可变成员可能通过多个线程访问时,我们通过 RAII 获取和释放锁,如下所示:
void MyClass::Method()
{
Lock lock(mMutex);
// ...
}
今天我审查了一些代码,其中使用继承实现锁,就像这样:
class MyClass : public Mutex
{
// ...
};
而锁定是由类锁定“自身”执行的:
void MyClass::Method()
{
Lock lock(this);
// ...
}
这种方法有什么优点或缺点吗?还是只是一个风格问题?