在.NET Framework 4.5 的Monitor文档中,我找到了一句话,它说 lock 关键字使用Monitor 的Enter(Object, Boolean)方法:
Enter 和 Exit 方法提供的功能与 C# lock 语句(Visual Basic 中的 SyncLock)提供的功能相同,只是 lock 和 SyncLock 将 Enter(Object, Boolean) 方法重载和 Exit 方法包装在 try...finally 中块(尝试...最后在 Visual Basic 中)以确保释放监视器。
另一方面,在Monitors的概述中有:
Visual Basic SyncLock 和 C# lock 语句使用 MonitorEnter 来获取锁,并使用 MonitorExit 来释放它。
上面的 MonitorEnter 指的是与之前不同版本的 Enter 方法,即:Enter(Object)
在Visual Studio 2012 的线程同步(C# 和 Visual Basic)中,有一个示例如何锁定监视器:
System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
try
{
DoSomething();
}
finally
{
System.Threading.Monitor.Exit(obj);
}
还有Enter(Object)版本。
什么是真的?lock 语句是否调用Enter(Object, Boolean)或Enter(Object)?到底是怎么做的有什么区别吗?