Например, допустимо ли это?
CRITICAL_SECTION cs;
::InitializeCriticalSection( &cs );
::EnterCriticalSection( &cs ); // First level
::EnterCriticalSection( &cs ); // Second level
/* do some stuff */
::LeaveCriticalSection( &cs ); // Second level
::LeaveCriticalSection( &cs ); // First level
::DeleteCriticalSection( &cs );
Очевидно, я бы никогда не сделал это намеренно, но что, если это произойдет в результате вызовов функций, так что "первый уровень" вызывается для блокировки объекта для сложного алгоритма (например, поиска) второй уровень "вызывается в функции доступа к объекту?