Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }