commit edb5541b92deeab19de0a9978f6804d50cafaeb1 Author: Eric Date: Fri Nov 24 18:44:48 2023 +0100 EjercicioLock diff --git a/EjercicioLock.py b/EjercicioLock.py new file mode 100644 index 0000000..adda7f3 --- /dev/null +++ b/EjercicioLock.py @@ -0,0 +1,38 @@ +#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() \ No newline at end of file