为什么这段代码会导致死锁?
THREAD 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_ );
THREAD 2:
EnterCriticalSection( &lock_ );
// This never runs
... Do something else for a while
LeaveCriticalSection( &lock_ );
根据Win32 API,可以从同一个线程连续两次调用EnterCriticalSection而不会发生死锁。似乎SleepConditionVariableCS仅解锁临界区一次,这意味着线程#2永远不会运行。我的推理是否正确?
基本上,我想要的就像Java的ReentrantLock。 ReentrantLock和CRITICAL_SECTION有什么区别?
答案 0 :(得分:0)
SleepConditionVariableCS似乎只解锁了一次关键部分,这意味着线程#2永远不会运行。