这是我一直不明白的事情。创建一个被锁定
的虚拟对象,就像这个例子
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;
}
}
}
来自 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
语句,就像你建议的那样,将无法区分许多关键部分。
编辑
虽然这看起来很明显,但值得注意的是,需要进入给定关键部分的每个部分都必须能够访问锁定的对象。因此,这不是在 lock
语句之前和在同一范围内创建任意实例的问题。
关于c# - 为什么我们需要在 C# 中锁定和对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444044/