Я пытаюсь изучить потоки в C#, и я видел, что что-то появилось в нескольких статьях, но я не уверен, что полностью его понимаю: В данной два примера, каково было бы принципиальное различие между фиксацией «этого» и «thisLock».Получение блокировки с использованием объекта, а не это - Threading
Пример 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» только останавливает другие потоки от ввода этой конкретной области кода.
Были ли попытки блокировки «этого» остановить все операции над объектом, то есть вызовы других методов другими потоками?
Неужели я принципиально пропустил это, или это правильный вывод?
ли [это] помогает (http://stackoverflow.com/questions/251391/why-is-lockthis-bad) ? –
Предложение Шрирама - это ответ - чтобы быть ясным, 'lock (this)' ничем не отличается от 'lock (somethingEls e) «если смотреть изолированно. – Jon