导航

8月《程序员》对lock的评析有错?

Posted on 2005-08-30 20:56  InterMa  阅读(361)  评论(1编辑  收藏  举报
待着没事看了一会8月的《程》,发现P86对lock的评析似乎有错:

    崔轶的评析认为lock块中发生异常,流程跳转时不会释放锁。
    即lock (x) ... = 
    System.Threading.Monitor.Enter(x);
       ...
    System.Threading.Monitor.Exit(x);
 
和我的印象不符阿,记得可以释放锁吧?

看了一下MSDN,果然如此,可以释放锁:
ms-help://MS.MSDNQTR.2003FEB.2052/csspec/html/vclrfcsharpspec_8_12.htm
MSDN中评述如下所示:

下列形式的 lock 语句

lock (x) ...

(其中 x 是一个引用类型的表达式)完全等效于

System.Threading.Monitor.Enter(x);
try {
...
}
finally {
System.Threading.Monitor.Exit(x);
}

不同的只是:实际执行中 x 只计算一次。

呵呵,原来已经放到finally里边了。