c# – 为什么需要冗余锁定对象?

出于好奇,我们在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关键字?

解决方法:

用于锁定的对象不是多余的.该对象充当令牌,用于实现简单的同步协议:持有锁的任何人都被授予对锁定代码的访问权限.所有其他人都必须等到锁被释放.

如果没有对象,则不可能有不同的令牌,并且所有同步都依赖于单个内部令牌.这不会很有效.

上一篇:mysql-如何一次处理多个插入


下一篇:MySQL InnoDB下一键锁定中唯一索引和非唯一索引之间差异的基本原理