1 #! /usr/bin/env python2.4
12 class filosofo(threading.Thread):
13 def __init__(self, izq, der, cant):
14 threading.Thread.__init__(self)
16 self.rnd = random.Random()
17 self.cant = cant # cantidad de veces que va a comer
18 self.comi = 0 # cantidad de veces que comio
21 self.ambos = [False, False]
24 def agarrarPalitoDerecho(self):
25 semaforos[self.der].acquire()
26 palitos[self.der] = False
28 print 'Soy '+str(self.id)+' y agarre el palito derecho'
30 def agarrarPalitoIzquierdo(self):
31 semaforos[self.izq].acquire()
32 palitos[self.izq] = False
34 print 'Soy '+str(self.id)+' y agarre el palito izquierdo'
36 def dejarPalitoDerecho(self):
37 palitos[self.der] = True
38 semaforos[self.der].release()
40 print 'Soy '+str(self.id)+' y solte el palito derecho'
42 def dejarPalitoIzquierdo(self):
43 palitos[self.izq] = True
44 semaforos[self.izq].release()
46 print 'Soy '+str(self.id)+' y solte el palito izquierdo'
49 t = self.rnd.randint(2,5)
50 print 'Soy '+str(self.id)+' y voy a pensar durante '+str(t)+' segundos'
54 t = self.rnd.randint(1,5)
55 if self.ambos == [True, True]:
56 print 'Soy '+str(self.id)+' y voy a comer '+str(t)+' segundos'
57 self.comi = self.comi + 1
58 self.izquierdo = self.derecho = False
61 self.dejarPalitoIzquierdo()
62 self.dejarPalitoDerecho()
68 if self.cant == self.comi: return True
72 while not self.lleno():
74 self.agarrarPalitoDerecho()
75 self.agarrarPalitoIzquierdo()
78 # while not self.lleno():
79 # self.agarrarPalitoDerecho()
80 # self.agarrarPalitoIzquierdo()
81 # if not self.comer():
84 if __name__ == '__main__':
86 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>"
88 if int(sys.argv[1]) <= 1:
89 print "Debe haber por lo menos 2 chinos"
93 todos = int(sys.argv[1]);
94 for i in range(todos):
96 semaforos.append(threading.Semaphore(1))
97 chinos.append(filosofo(i,(i+1)%todos,int(sys.argv[2])))