gpt4 book ai didi

c#为什么要把对象放在lock语句中

转载 作者:太空宇宙 更新时间:2023-11-03 18:59:50 26 4
gpt4 key购买 nike

谁能帮我解释一下:

锁内的语句将被锁定,除非完成并释放锁,否则任何人都无法通过。那么锁里面的对象是什么,用于

lock (obj) 
{
///statement
}

这是否意味着 obj 被锁定并且不能从其他任何地方使用,除非锁完成了他的工作。

最佳答案

我做了一个非常简单的类来说明锁中的对象的用途。

public class Account
{
private decimal _balance = 0m;
private object _transactionLock = new object();
private object _saveLock = new object();

public void Deposit(decimal amount)
{
lock (_transactionLock)
{
_balance += amount;
}
}

public void Withdraw(decimal amount)
{
lock (_transactionLock)
{
_balance -= amount;
}
}

public void Save()
{
lock (_saveLock)
{
File.WriteAllText(@"C:\Balance.txt", _balance.ToString());
}
}
}

你会注意到我有三个锁,但只有两个变量。

lock (_transactionLock) 相互锁定代码区域以仅允许当前线程进入 - 这可能意味着当前线程可以重新进入锁定区域。如果一个线程已经拥有锁,则无论它们命中哪个锁 (_transactionLock),其他线程都会被阻塞。

第二个锁 lock (_saveLock) 是为了向您展示 lock 语句中的对象用于识别锁。因此,如果线程位于 lock (_transactionLock) 语句之一中,则不会阻止线程进入 lock (_saveLock) block (除非另一个线程已经那里)。

关于c#为什么要把对象放在lock语句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37826403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com