Beispiel #1
0
 private static void Transferir(Cuenta cuentaA, Cuenta cuentaB, decimal importe) {
     Console.WriteLine("Transfiriendo {0:N}€ de cuenta {1} a cuenta {2}...",
         importe, cuentaA.NumeroCuenta, cuentaB.NumeroCuenta);
     if (cuentaA.Transferir(cuentaB, importe))
         Console.WriteLine("\tResultado satisfactorio, hilo {0}.", Thread.CurrentThread.Name);
     else
         Console.WriteLine("\tError en la transacción, hilo {0}.", Thread.CurrentThread.Name);
 }
Beispiel #2
0
 public bool Transferir(Cuenta cuentaDestino, decimal cantidad) {
     lock (this) {
         lock (cuentaDestino) {
             Thread.Sleep(100); // Simula procesamiento...
             if (this.Retirar(cantidad)) {
                 cuentaDestino.Ingresar(cantidad);
                 return true;
             }
             else
                 return false;
         }
     }
 }
Beispiel #3
0
        public static void Main() {
            decimal importeInicial = 30000;
            Cuenta cuentaA = new Cuenta("A", importeInicial), cuentaB = new Cuenta("B", importeInicial);

            Random random = new Random();
            int iteraciones = 1000;
            Thread[] hilos = new Thread[iteraciones];
            for (int i = 0; i < iteraciones; i++) {
                decimal importe = (decimal)random.NextDouble() * random.Next(1, 600);
                if (i % 2 == 0)
                    hilos[i] = new Thread(() => Transferir(cuentaA, cuentaB, importe));
                else
                    hilos[i] = new Thread(() => Transferir(cuentaB, cuentaA, importe));
                hilos[i].Name = "Transferencia número " + i;
            }

            foreach (Thread hilo in hilos)
                hilo.Start();

        }