我有一个问题..如果我有这样的事情就可以了:
try
{
lock(programLock)
{
//some stuff 1
}
}
catch(Exception ex) { //stuff 2 }
我很好奇如果"some stuff 1"
导致异常,programLock
是否仍然保持锁定状态?
答案 0 :(得分:15)
不,锁将被释放,锁大致相当于:
try
{
Monitor.Enter(programLock);
// some stuff 1
}
finally
{
Monitor.Exit(programLock);
}
(意思是如果抛出异常,在退出lock语句的范围时将自动调用Monitor.Exit
)
答案 1 :(得分:6)
Lock()
只是
try
{
Monitor.Enter(...);
}
finally
{
Monitor.Exit(....);
}
所以它已经处理好了。
答案 2 :(得分:4)
“...锁定或SyncLock确保了 底层监视器甚至被释放 如果受保护的代码抛出一个 异常“。
答案 3 :(得分:2)
没有。离开锁架将永远解锁。
答案 4 :(得分:2)
不,它不会保持锁定状态。
锁的“右括号”基本上是Monitor.Exit的finally子句。
请参阅此相关的StackOverflow问题。
Does a locked object stay locked if an exception occurs inside it?