出于好奇,我们在MSDN上查看了lock关键字:
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;
}
}
}
在上面的示例中,对象thisLock与lock关键字一起使用.为什么需要这个?它似乎没有任何其他目的.为什么不单独拥有lock关键字?
解决方法:
用于锁定的对象不是多余的.该对象充当令牌,用于实现简单的同步协议:持有锁的任何人都被授予对锁定代码的访问权限.所有其他人都必须等到锁被释放.
如果没有对象,则不可能有不同的令牌,并且所有同步都依赖于单个内部令牌.这不会很有效.