gpt4 book ai didi

c# - 锁定在Framework 3.5与4.0之间?

转载 作者:行者123 更新时间:2023-12-03 13:20:51 25 4
gpt4 key购买 nike

AFAIK,这2个版本中的lock之间有区别。

框架4又添加了一项检查,即在监视器进入期间是否存在异常(例如内存不足异常)

并且有一个lockTaken标志,指示是否应释放锁定(在finally子句中)(由于try子句中的失败代码)。

就像是

bool lockTaken = false;
try
{
Monitor.Enter (lockObj, ref lockTaken);
...
}
finally { if (lockTaken) Monitor.Exit (lockObj); }

(非常类似于 using代码(dispose ...))

但是reftector的查看,我看到了完全不同的东西:
[SecuritySafeCritical]
public static void Enter(object obj, ref bool lockTaken)
{
if (lockTaken)
{
throw new ArgumentException(Environment.GetResourceString("Argument_MustBeFalse"), "lockTaken");
}
ReliableEnter(obj, ref lockTaken);
}

最后,尝试的模式在哪里?

我想念什么?

最佳答案

您应该看看使用lock语句的反编译方法,而不是研究框架的代码。因此,如果您尝试反编译以下方法:

object syncRoot = new object();
void Foo()
{
lock(syncRoot) {}
}

您会看到期望的结果:
void Foo()
{
bool lockTaken;
try
{
Monitor.Enter(syncRoot, out lockTaken);
}
finally
{
if (lockTaken)
Monitor.Exit(syncRoot);
}
}

关于c# - 锁定在Framework 3.5与4.0之间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13625160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com