Codigo de python
Enviado por acevedo4 • 8 de Noviembre de 2022 • Tarea • 1.273 Palabras (6 Páginas) • 48 Visitas
rom threading import Semaphore, Thread, Lock
numero_de_autos=0
cuenta_motor = 0 #cuentas de elementos independientes
cuenta_seccion_de_chasis = 0
cuenta_seccion_de_transmision = 0
cuenta_llantas = 0
cuenta_pinturas = 0
cuenta_motor_chasis = 0 #cuentas de elementos compuestos
cuenta_transmision_llantas = 0
cuenta_autos_sin_pintura = 0
cuenta_autos = 0
total_motor = 0 #totales de elementos independientes
total_seccion_de_chasis = 0
total_seccion_de_transmision = 0
total_llantas = 0
total_pinturas = 0
total_motor_chasis = 0 #totales de elementos compuestos
total_transmision_llantas = 0
total_autos_sin_pintura = 0
total_autos = 0
mutex_print = Semaphore(1) #mutex para imprimir correctamente
mutex_motor = Semaphore(1) #mutexes de elementos independientes
mutex_seccion_de_chasis = Semaphore(1)
mutex_seccion_de_transmision = Semaphore(1)
mutex_llantas = Semaphore(1)
mutex_pinturas = Semaphore(1)
mutex_motor_chasis = Semaphore(1) #mutexes de elementos compuestos
mutex_transmision_llantas = Semaphore(1)
mutex_autos_sin_pintura = Semaphore(1)
mutex_autos = Semaphore(1)
hay_motor = Semaphore(0) #barreras de elementos independientes
hay_seccion_de_chasis = Semaphore(0)
hay_seccion_de_transmision = Semaphore(0)
hay_llantas = Semaphore(0)
hay_pintura = Semaphore(0)
hay_motor_chasis = Semaphore(0) #barreras de elementos compuestos
hay_transmision_llantas = Semaphore(0)
hay_auto_sin_pintura = Semaphore(0)
mutex_completado = Semaphore(0) #barrera de finalizacion
#LAS FUNCIONES A CONTINUACION SON SIMILARES POR LO QUE SOLO COMENTARE LAS SECCIONES PERTINENTES UNA SOLA VEZ
def constructor_motor():
global mutex_motor, cuenta_motor, total_motor, mutex_print, hay_motor
mutex_motor.acquire() #se protege las variables de cuenta y totales
cuenta_motor = cuenta_motor + 1
total_motor = total_motor + 1
mutex_print.acquire()
print("\n Se construyó el motor numero",total_motor)
mutex_print.release()
mutex_motor.release()
hay_motor.release() #se hace una señalización de que hay motor disponible
def constructor_seccion_de_chasis():
global mutex_seccion_de_chasis, cuenta_seccion_de_chasis, total_seccion_de_chasis, hay_seccion_de_chasis, mutex_print
mutex_seccion_de_chasis.acquire()
cuenta_seccion_de_chasis = cuenta_seccion_de_chasis + 1
total_seccion_de_chasis = total_seccion_de_chasis + 1
mutex_print.acquire()
print("\n Se construyó la seccion de chasis numero",total_seccion_de_chasis)
mutex_print.release()
if(cuenta_seccion_de_chasis > 1):
hay_seccion_de_chasis.release() #aqui tambien se hace una señalización pero con una condicional, por lo que seria un torniquete
mutex_seccion_de_chasis.release()
def constructor_seccion_de_transmision():
global mutex_seccion_de_transmision, cuenta_seccion_de_transmision, total_seccion_de_transmision, hay_seccion_de_transmision, mutex_print
mutex_seccion_de_transmision.acquire()
cuenta_seccion_de_transmision = cuenta_seccion_de_transmision + 1
total_seccion_de_transmision = total_seccion_de_transmision + 1
mutex_print.acquire()
print("\n Se construyó la seccion de transmision numero",total_seccion_de_transmision)
mutex_print.release()
if(cuenta_seccion_de_transmision > 3):
hay_seccion_de_transmision.release()
mutex_seccion_de_transmision.release()
def constructor_llantas():
global mutex_llantas, cuenta_llantas, total_llantas, mutex_print, hay_llantas
mutex_llantas.acquire()
cuenta_llantas = cuenta_llantas + 1
total_llantas = total_llantas + 1
mutex_print.acquire()
print("\n Se construyó la llanta numero",total_llantas)
mutex_print.release()
if(cuenta_llantas > 3):
hay_llantas.release()
mutex_llantas.release()
def mezclador_pintura():
global mutex_pinturas, cuenta_pinturas, total_pinturas, mutex_print, hay_pintura
mutex_pinturas.acquire()
cuenta_pinturas = cuenta_pinturas + 1
total_pinturas = total_pinturas + 1
mutex_print.acquire()
print("\n Se mezclo la pintura numero",total_pinturas)
mutex_print.release()
mutex_pinturas.release()
hay_pintura.release()
def ensamblar_motor_con_seccion_de_chasis():
global hay_motor, hay_seccion_de_chasis, cuenta_motor, cuenta_seccion_de_chasis, total_motor_chasis, mutex_motor_chasis, mutex_motor, mutex_seccion_de_chasis, cuenta_motor_chasis, mutex_print, hay_motor_chasis
hay_motor.acquire()
hay_seccion_de_chasis.acquire() #debe esperar a una señalizacion de sus elementos independientes de que estan listos
mutex_motor_chasis.acquire() #tambien se debe proteger las variables que cuentan a este elemento compuesto
total_motor_chasis = total_motor_chasis + 1
mutex_motor.acquire()
mutex_seccion_de_chasis.acquire()
mutex_print.acquire()
print("\n ---> Hay",cuenta_motor,"motor/es y",cuenta_seccion_de_chasis,"secciones
...