public void FundTransfer() { object _lock1, _lock2; if (FromAccount.id < ToAccount.id) { _lock1 = FromAccount; _lock2 = ToAccount; } else { _lock1 = ToAccount; _lock2 = FromAccount; } Console.WriteLine($"{Thread.CurrentThread.Name} is trying to acquire lock on {FromAccount.id}"); lock (_lock1) { Console.WriteLine($"{Thread.CurrentThread.Name} acquired lock on {FromAccount.id}"); Console.WriteLine($"{Thread.CurrentThread.Name} is doing database work"); Thread.Sleep(1000); Console.WriteLine($"{Thread.CurrentThread.Name} is trying to acquire lock on {ToAccount.id}"); lock (_lock2) { FromAccount.WithdrawMoney(TransferAmount); ToAccount.DepositMoney(TransferAmount); } } }
public void FundTransfer() { Console.WriteLine($"{Thread.CurrentThread.Name} is trying to acquire lock on {FromAccount.id}"); lock (FromAccount) { Console.WriteLine($"{Thread.CurrentThread.Name} acquired lock on {FromAccount.id}"); Console.WriteLine($"{Thread.CurrentThread.Name} is doing database work"); Thread.Sleep(1000); Console.WriteLine($"{Thread.CurrentThread.Name} is trying to acquire lock on {ToAccount.id}"); lock (ToAccount) { FromAccount.WithdrawMoney(TransferAmount); ToAccount.DepositMoney(TransferAmount); } } }