这是我一直不明白的事情。创建一个虚拟对象几乎看起来像是一个黑客lock
ed,就像例子一样
class Account
{
decimal balance;
private Object thisLock = new Object();
public void Withdraw(decimal amount)
{
lock (thisLock)
{
if (amount > balance)
{
throw new Exception("Insufficient funds");
}
balance -= amount;
}
}
}
from https://msdn.microsoft.com/en-us/library/c5kehkcz.aspx https://msdn.microsoft.com/en-us/library/c5kehkcz.aspx.
为什么语言设计者不能做到这一点
class Account
{
decimal balance;
public void Withdraw(decimal amount)
{
lock
{
if (amount > balance)
{
throw new Exception("Insufficient funds");
}
balance -= amount;
}
}
}
会是等价的吗?
实例传递给lock
服务于识别关键部分.
您的代码中可能有任意数量的不相关的关键部分,并且每个关键部分都将锁定不同的对象。无参数lock
声明类似您建议的声明将无法区分许多关键部分。
EDIT
虽然看起来很明显,但值得注意的是,需要进入给定临界区的每个部分都必须有权访问锁定的对象。因此,这不是在之前且在相同范围内创建任意实例的问题lock
陈述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)