Меня использовали для поддержки устаревшего кода, и я вижу некоторые вещи, которые заставляют меня чесать голову в замешательстве . В некоторых разделах кода я вижу, что экземпляр класса использует экземпляр 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, поэтому блокировка автоматически снимается, когда выполнение выходит за пределы области видимости. Есть ли другие преимущества / недостатки любой реализации?