1 #! /usr/bin/env python2.4
13 class filosofo(threading.Thread):
14 def __init__(self, numeracion, cant):
15 threading.Thread.__init__(self)
17 self.rnd = random.Random()
18 self.cant = cant # cantidad de veces que va a comer
19 self.comi = 0 # cantidad de veces que comio
21 self.izquierdo = False
24 def agarrarPalitoDerecho(self):
25 if self.id+1 == len(palitos): ind = 0
27 semaforos[ind].acquire()
28 self.derecho = palitos[ind]
30 print 'Soy '+str(self.id)+' y agarre el palito derecho'
31 else: self.derecho = False
32 semaforos[ind].release()
34 def agarrarPalitoIzquierdo(self):
35 semaforos[self.id].acquire()
36 self.izquierdo = palitos[self.id]
38 print 'Soy '+str(self.id)+' y agarre el palito izquierdo'
39 else: self.izquierdo = False
40 semaforos[self.id].release()
43 t = self.rnd.randint(1,5)
44 print 'Soy '+str(self.id)+' y voy a pensar durante '+str(t)+' segundos'
48 t = self.rnd.randint(1,5)
49 if self.derecho and self.izquierdo:
50 print 'Soy '+str(self.id)+' y voy a comer '+ str(t) + ' segundos'
51 self.comi = self.comi + 1
52 self.izquierdo = self.derecho = False
54 if self.id+1 == len(palitos): ind = 0
56 palitos[self.id] = True
58 print 'Soy '+str(self.id)+' y solte los palitos'
63 if self.cant == self.comi: return True
67 time.sleep(self.rnd.randint(1,5))
68 while not self.lleno():
69 self.agarrarPalitoDerecho()
70 self.agarrarPalitoIzquierdo()
73 else: time.sleep(5) #comiendo
75 if __name__ == '__main__':
77 print "Modo de uso: "+ str(sys.argv[0]) + "<Cantidad de chinos invitados a la fiesta> <Cantidad de rondas que estara pensando o comiendo cada chino>"
81 for i in range(int(sys.argv[1])):
83 semaforos.append(threading.Semaphore(1))
84 chinos.append(filosofo(i,int(sys.argv[2])))