首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Win32中的CRITICAL_SECTION / CONDITION_VARIABLE死锁

Win32中的CRITICAL_SECTION / CONDITION_VARIABLE死锁
EN

Stack Overflow用户
提问于 2011-11-04 03:17:16
回答 1查看 1.2K关注 0票数 1

为什么这段代码会导致死锁?

线程1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
EnterCriticalSection( &lock_ );

// This never runs
... Do something else for a while

LeaveCriticalSection( &lock_ );

根据Win32接口,EnterCriticalSection可以在同一线程中连续调用两次,而不会发生死锁。SleepConditionVariableCS似乎只解锁了临界区一次,这意味着线程#2永远不会运行。我的推理是正确的吗?

基本上,我想要的是类似于Java的ReentrantLock。ReentrantLock和CRITICAL_SECTION有什么不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-03 13:11:28

SleepConditionVariableCS似乎只解锁了临界区一次,这意味着线程#2永远不会运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8000591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档