我有一个问题..如果我有这样的东西,可以吗:
try
{
lock(programLock)
{
//some stuff 1
}
}
catch(Exception ex) { //stuff 2 }我很好奇"some stuff 1"是否会导致异常,programLock是否仍然处于锁定状态?
发布于 2011-04-06 23:37:51
不,锁将被释放,锁大致相当于:
try
{
Monitor.Enter(programLock);
// some stuff 1
}
finally
{
Monitor.Exit(programLock);
}(这意味着如果抛出异常,Monitor.Exit将在您退出lock语句的作用域时自动调用)
发布于 2011-04-06 23:38:33
Lock()只不过是
try
{
Monitor.Enter(...);
}
finally
{
Monitor.Exit(....);
}所以它已经在处理它了。
发布于 2011-04-06 23:46:58
"... lock或SyncLock确保底层监视器被释放,即使受保护的代码抛出异常。“
https://stackoverflow.com/questions/5569025
复制相似问题