首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试并锁定问题

尝试并锁定问题
EN

Stack Overflow用户
提问于 2011-04-06 23:35:41
回答 5查看 3.6K关注 0票数 12

我有一个问题..如果我有这样的东西,可以吗:

代码语言:javascript
复制
try 
{ 
    lock(programLock) 
    {
         //some stuff 1
    }
}
catch(Exception ex) { //stuff 2 }

我很好奇"some stuff 1"是否会导致异常,programLock是否仍然处于锁定状态?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-06 23:37:51

不,锁将被释放,锁大致相当于:

代码语言:javascript
复制
try
{
    Monitor.Enter(programLock);
    // some stuff 1
}
finally
{
    Monitor.Exit(programLock);
}

(这意味着如果抛出异常,Monitor.Exit将在您退出lock语句的作用域时自动调用)

票数 15
EN

Stack Overflow用户

发布于 2011-04-06 23:38:33

Lock()只不过是

代码语言:javascript
复制
try
{
   Monitor.Enter(...);
}
finally
{
   Monitor.Exit(....);
}

所以它已经在处理它了。

票数 6
EN

Stack Overflow用户

发布于 2011-04-06 23:46:58

来自msdn documentation

"... lock或SyncLock确保底层监视器被释放,即使受保护的代码抛出异常。“

注意:您可以使用using块(.NET版本的RAII惯用法)为任意操作创建自己的异常安全块。

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

https://stackoverflow.com/questions/5569025

复制
相关文章

相似问题

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