【发布时间】:2012-11-29 11:49:03
【问题描述】:
AFAIK ,lock 在这两个版本中是有区别的。
Framework 4 增加了一项检查是否在监视器进入期间出现异常(如内存不足异常)
还有一个lockTaken 标志指示是否应该释放锁(在finally 子句中)(由于try 子句中的失败代码)。
有点像
bool lockTaken = false;
try
{
Monitor.Enter (lockObj, ref lockTaken);
...
}
finally { if (lockTaken) Monitor.Exit (lockObj); }
(非常类似于using 代码(dispose...))
但是通过反射器观看我看到完全不同的东西:
[SecuritySafeCritical]
public static void Enter(object obj, ref bool lockTaken)
{
if (lockTaken)
{
throw new ArgumentException(Environment.GetResourceString("Argument_MustBeFalse"), "lockTaken");
}
ReliableEnter(obj, ref lockTaken);
}
try 的模式到底在哪里?
我错过了什么?
【问题讨论】:
-
在第一个 sn-p 中您正在查看方法调用,在第二个中查看被调用方法的实现。
-
@dtb 这就是 c# 4.0 翻译锁定语句的方式(编辑了标题)。
标签: c# .net multithreading .net-4.0 locking