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.
38 lines
1.2 KiB
38 lines
1.2 KiB
#Ejercicio: Imagina que tienes un sistema de cajeros automáticos con un saldo inicial de 1000 euros.
|
|
#Varios usuarios pueden acceder al cajero simultáneamente para retirar dinero.
|
|
#Tu tarea es asegurarte de que, cuando un usuario retire dinero,
|
|
#el saldo se actualice correctamente sin ser afectado por las operaciones de otros usuarios.
|
|
#Para ello, puedes utilizar la instrucción lock. Ejemplo de salida.
|
|
|
|
import random
|
|
import threading
|
|
|
|
class Cajero:
|
|
def __init__(self):
|
|
self.saldoCajero = 1000
|
|
self.lock = threading.Lock()
|
|
|
|
def mostarResultado(self,result,cantidad):
|
|
if(result):
|
|
print(f"Retirada exitosa de {cantidad}")
|
|
else:
|
|
print(f"Saldo insuficiente para retirar {cantidad}")
|
|
|
|
def sacarDinero(self,cantidad):
|
|
with self.lock:
|
|
if(self.saldoCajero >= cantidad):
|
|
self.saldoCajero -= cantidad
|
|
self.mostarResultado(True,cantidad)
|
|
else:
|
|
self.mostarResultado(False,cantidad)
|
|
|
|
cajero = Cajero()
|
|
hilos = list()
|
|
|
|
for i in range(random.randrange(1000)):
|
|
t = threading.Thread(target=cajero.sacarDinero,args=(random.randrange(1,100),))
|
|
hilos.append(t)
|
|
t.start()
|
|
|
|
for t in hilos:
|
|
t.join() |