我被指派支持一些遗留代码,我看到一些让我困惑地挠头的事情。在某些代码段中,我看到一个类实例使用 CMutex 实例来同步方法执行。例如
class CClassA : public CObject
{
public:
void DoSomething();
private:
CMutex m_mutex;
}
void CClassA::DoSomething()
{
m_mutex.Lock();
//...logic...
m_mutex.Unlock();
}
在同一个项目的其他地方,我发现代码使用的是 CSingleLock
class CClassB : public CObject
{
public:
void DoSomething();
private:
CCriticalSection m_crit;
}
void CClassB::DoSomething()
{
CSingleLock lock(&m_crit);
lock.Lock();
//...logic...
lock.Unlock();
}
在查看了有关同步的 MSDN 文档后,似乎 CClassB 正在实现建议的方法,但我不清楚 CClassA 使用的实现中存在什么危险。据我所知,这两种方法的唯一区别是 CSingleLock 具有 RAII 的好处,所以当执行退出作用域时,锁会自动释放。这两种实施方式是否还有其他优点/缺点?