Lo hice... CASI!!!
Está separado en clases y funcionando mas o menos.
Hice el avión mas chico para verificar datos repetidos que deberían obviarse con un while en la linea 18 de la clase reserva.
El tema es que Reserva el asiento 15 por ejemplo y en la lista de ocupados me guarda un 16, y a partir de ahi todos los numeros tienen una pequeña variación, no se cual podría ser el problema (Clase vuelo linea 13).
Ayuda por favor, he plantado culo en asiento y avancé bastante, pero parece que "ALGO" no estoy viendo bien.
Desde ya muchas gracias.
Edito: Ya di con el error. En la linea 13 de la clase Vuelo paso a la nueva lista el orden del valor y no el valor en si y difieren en primera instancia en 1 (aumenta a medida q voy sacando). Todavia tengo que resolverlo.
Código Python(main):
Ver original# Simular con hilos un sistema de reservación de vuelos. Las personas pueden consultar y reservar vuelos.
# Hacer la sincronización con múltiples personas accediendo al registro de vuelos.
# Cuando se reserva no se puede consultar y viceversa. Lanzar 20 hilos
# 1000 lugares en el avion.
from Buffer import Vuelo #Buffer, Ev_lector y Ev_escritor son los modulos
from Ev_lector import Consulta
from Ev_escritor import Reserva
vuelo = Vuelo()
lector = Consulta("Consulta", vuelo, 20)
escritor = Reserva("Reserva", vuelo, 20)
lector.start()
escritor.start()
lector.join()
escritor.join()
Código Python(Clase Reserva):
Ver originalimport threading
import random
import time
class Reserva(threading.Thread):
def __init__(self, nombreHilo, asientos, cant):
threading.Thread.__init__(self, name=nombreHilo)
self.cant=cant
self.asientos=asientos
def run(self):
#Reserva
for i in range(self.cant):
time.sleep(random.randrange(3))
a=random.randint(1,100)
while (self.asientos.vuelo.count(a)==0):
a=random.randint(1,100)
self.asientos.set(a)
print ("El hilo "+str(self.name)+" reserva el asiento "+ str(a))
Código Python(Clase Consulta):
Ver originalimport threading
import random
import time
class Consulta(threading.Thread):
def __init__(self, nombreHilo, asientos, cant):
threading.Thread.__init__(self, name = nombreHilo)
self.cant=cant
self.asientos=asientos
def run(self):
for i in range(self.cant):
time.sleep(random.randrange(3))
#a=self.asientos.ocup
print("La lista de asientos ocupados es la siguiente: \n" + str(self.asientos.get())+"\n")
Código Python(Clase Vuelo):
Ver originalimport threading
class Vuelo:
def __init__(self):
self.vuelo = []
for v in range(1,101):
self.vuelo.append(v)
print(str(self.vuelo))
self.ocup=[]
def set(self,asiento):
self.ocup.append(self.vuelo.pop(asiento))
def get(self):
asi_oc=self.ocup
return asi_oc