为什么这段代码会导致死锁?
线程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接口,EnterCriticalSection可以在同一线程中连续调用两次,而不会发生死锁。SleepConditionVariableCS似乎只解锁了临界区一次,这意味着线程#2永远不会运行。我的推理是正确的吗?
基本上,我想要的是类似于Java的ReentrantLock。ReentrantLock和CRITICAL_SECTION有什么不同?
发布于 2012-02-03 13:11:28
SleepConditionVariableCS似乎只解锁了临界区一次,这意味着线程#2永远不会运行。
https://stackoverflow.com/questions/8000591
复制相似问题