You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.2 KiB

import threading
import time
class CuentaBancaria:
def __init__(self, nombre, saldo):
self.nombre = nombre
self.saldo = saldo
def __str__(self):
return self.nombre+' '+str(self.saldo)
class BankTransferThread(threading.Thread):
def __init__(self, ordenante, receptor, cantidad):
threading.Thread.__init__(self)
self.ordenante = ordenante
self.receptor = receptor
self.cantidad = cantidad
def run(self):
lock.acquire()
saldo_ordenante= self.ordenante.saldo
saldo_ordenante-= self.cantidad
# retraso para permitir ejecutar saltar entre hilos
time.sleep(0.001)
self.ordenante.saldo = saldo_ordenante
saldo_receptor = self.receptor.saldo
saldo_receptor += self.cantidad
# retraso para permitir ejecutar saltar entre hilos
time.sleep(0.001)
self.receptor.saldo = saldo_receptor
lock.release()
# Las cuentas son recursos compartidos
cuenta1 = CuentaBancaria("cuentaOrigen", 100)
cuenta2 = CuentaBancaria("cuentaDestino", 0)
lock = threading.Lock()
threads = []
for i in range(100):
threads.append(BankTransferThread(cuenta1, cuenta2, 1))
for thread in threads:
thread.start()
for thread in threads:
thread.join()
print(cuenta1)
print(cuenta2)

Powered by Informatica FP.