Почему этот код вызывает тупик?
РЕЗЬБА 1:
EnterCriticalSection( &lock_ );
... Create thread 1
EnterCriticalSection( &lock_ );
while (pred) {
SleepConditionVariableCs( &cond_, &lock_ );
// At this point, I would expect thread #2 to wake up, but it doesn't.
}
LeaveCriticalSection( &lock_ );
LeaveCriticalSEction( &lock_ );
РЕЗЬБА 2:
EnterCriticalSection( &lock_ );
// This never runs
... Do something else for a while
LeaveCriticalSection( &lock_ );
Согласно Win32 API, EnterCriticalSection можно вызывать два раза подряд из одного и того же потока без блокировки. Похоже, что SleepConditionVariableCS разблокирует критическую секцию только один раз, что означает, что поток № 2 никогда не будет работать. Правильно ли мое рассуждение здесь?
По сути, я хочу что-то вроде ReentrantLock Java. В чем разница между ReentrantLock и CRITICAL_SECTION?