我有一个问题...如果我的代码像下面这样,这样可以吗:
try
{
lock(programLock)
{
//some stuff 1
}
}
catch(Exception ex) { //stuff 2 }
我很好奇如果"一些东西 1"
引发了异常,是否programLock
仍然保持锁定状态?
不会,锁将被释放,锁大致等同于这个:
try
{
Monitor.Enter(programLock);
// some stuff 1
}
finally
{
Monitor.Exit(programLock);
}
(如果抛出异常,Monitor.Exit
将在退出 lock 语句块的作用域时自动调用)
Lock()
仅仅是一个
try
{
Monitor.Enter(...);
}
finally
{
Monitor.Exit(....);
}
不带锁括号,将始终解锁。