This question already has answers here:
Why is lock(this) {…} bad?
(16 个回答)
7年前关闭。
我正在尝试在 C# 中学习线程,我在几篇文章中看到了一些内容,但我不确定我是否完全理解它:
在给定的两个示例中,获取“this”与“thisLock”锁定之间的根本区别是什么。
示例 1:
示例 2:
根据我的理解,我认为“thisLock”只会阻止其他线程进入该特定代码区域。
锁定“this”是否会停止对该对象的所有操作,即其他线程对其他方法的调用?
我是否从根本上错过了理解这一点,或者这是正确的结论?
(16 个回答)
7年前关闭。
我正在尝试在 C# 中学习线程,我在几篇文章中看到了一些内容,但我不确定我是否完全理解它:
在给定的两个示例中,获取“this”与“thisLock”锁定之间的根本区别是什么。
示例 1:
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;
}
}
}
示例 2:
class Account
{
decimal balance;
public void Withdraw(decimal amount)
{
lock (this)
{
if (amount > balance)
{
throw new Exception("Insufficient funds");
}
balance -= amount;
}
}
}
根据我的理解,我认为“thisLock”只会阻止其他线程进入该特定代码区域。
锁定“this”是否会停止对该对象的所有操作,即其他线程对其他方法的调用?
我是否从根本上错过了理解这一点,或者这是正确的结论?
最佳答案
这两种情况将产生完全相同的效果。一个区别是其他对象看不到 thisLock
,因此您可以确定没有其他对象会重用锁。如果锁定 this
,另一部分代码也可以锁定 Account 的同一实例。
关于c# - 使用对象获取锁,而不是这个 - 线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20352287/
10-17 00:17