为什么锁可以确保底层监视器被释放并且监视器的直接使用不会?

Ful*_*oof 3 c# events multithreading synchronization locking

msdn文章Thread Synchronization(C#编程指南)指定:

lock (x)
{
    DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

相当于:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
try
{
    DoSomething();
}
finally
{
    System.Threading.Monitor.Exit(obj);
} 
Run Code Online (Sandbox Code Playgroud)

然后那个:

"使用lock关键字通常比直接使用Monitor类更受欢迎,... 因为锁可以确保释放底层监视器,即使受保护的代码抛出异常 "

这句话是否意味着使用监视器的最后一个代码片段不能确保"即使受保护的代码抛出异常,也会释放底层监视器"?
为什么?

好吧,我感到困惑的是相互矛盾的断言"等价"而不是(一种用法保险,另一种用途,等价物,不等同).

Doc*_*Max 5

粗体文本引用的情况更像是这样的:

Monitor.Enter(obj);
DoSomethingThatThrows();
Monitor.Exit(obj);
Run Code Online (Sandbox Code Playgroud)

其中,没有try-finally,抛出异常会绕过Monitor.Exit调用.