Критический раздел отрицательное количество блокировки

Как насчет перечисления?

11
задан PeeHaa 12 January 2014 в 03:40
поделиться

1 ответ

Я предполагаю, что вы говорите о классе CCriticalSection в MFC. Я думаю, вы смотрите на правильный критический раздел. Я обнаружил, что количество блокировок критического раздела может стать отрицательным, если количество вызовов функции Lock () меньше, чем количество вызовов Unlock (). Я обнаружил, что это обычно происходит в коде следующего типа:

void f()
{
   CSingleLock lock(&m_synchronizer, TRUE);
   //Some logic here
   m_synchronizer.Unlock();
}

На первый взгляд этот код выглядит совершенно безопасным. Однако обратите внимание, что я использую метод Unlock () CCriticalSection напрямую вместо метода Unlock () CSingleLock. Теперь происходит следующее: когда функция завершается, CSingleLock в своем деструкторе снова вызывает Unlock () критического раздела, и его счетчик блокировок становится отрицательным. После этого приложение будет в плохом состоянии и начнут происходить странные вещи.

6
ответ дан 3 December 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: