CMutex :: Lock против CSingleLock :: Lock

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

5
задан ildjarn 19 May 2011 в 18:39
поделиться