【发布时间】:2023-04-05 20:41:02
【问题描述】:
这是我一直无法理解的。创建一个获得locked 的虚拟对象几乎就像是一种黑客攻击,就像示例一样
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;
}
}
}
会等价吗?
【问题讨论】:
-
@Sayse 一点也不,否则没人会明白如何首先使用
lock。lock语句需要传入参数的原因很清楚,如果作者不理解这些原因,这个问题是非常有效的。 -
@rucamzu - 我想我误读了这个问题
标签: c# .net multithreading asynchronous