1 #! /usr/bin/env python2.4
12 class monitor(threading.Thread):
13 def __init__(self, cant):
14 threading.Thread.__init__(self)
20 while todoscomieron < self.cant:
21 print 'palitos = ', palitos
24 class filosofo(threading.Thread):
25 def __init__(self, izq, der, cant):
26 threading.Thread.__init__(self)
27 self.id = self.izq = izq
29 self.rnd = random.Random()
30 self.cant = cant # cantidad de veces que va a comer
31 self.comi = 0 # cantidad de veces que comio
33 self.izquierdo = False
36 @synchronized('LockTomarDerecho')
37 def agarrarPalitoDerecho(self):
38 self.derecho = palitos[self.der]
40 palitos[self.der] = False
41 print 'Soy '+str(self.id)+' y agarre el palito derecho'
45 palitos[self.der] = True
48 @synchronized('LockSoltarDerecho')
49 def dejarPalitoDerecho(self):
51 palitos[self.der] = True
52 print 'Soy '+str(self.id)+' y solte el palito derecho'
54 @synchronized('LockIzquierdo')
55 def agarrarPalitoIzquierdo(self):
56 self.izquierdo = palitos[self.izq]
58 palitos[self.izq] = False
59 print 'Soy '+str(self.id)+' y agarre el palito izquierdo'
62 self.izquierdo = False
63 palitos[self.izq] = True
67 t = self.rnd.randint(1,5)
68 print 'Soy '+str(self.id)+' y voy a pensar durante '+str(t)+' segundos'
72 if self.derecho and self.izquierdo:
73 t = self.rnd.randint(1,5)
74 print 'Soy '+str(self.id)+' y voy a comer durante '+str(t)+' segundos'
75 self.comi = self.comi + 1
77 self.derecho = self.izquierdo = False
78 palitos[self.izq] = True
79 palitos[self.der] = True
80 print 'Soy '+str(self.id)+' y solte los palitos'
84 if self.cant == self.comi:
85 todoscomieron = todoscomieron + 1
90 while not self.lleno():
92 if self.agarrarPalitoDerecho():
93 self.agarrarPalitoIzquierdo()
95 self.dejarPalitoDerecho()
98 if __name__ == '__main__':
100 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>"
103 # mo = monitor(int(sys.argv[1]))
105 for i in range(int(sys.argv[1])):
107 chinos.append(filosofo(i,(i+1)%int(sys.argv[1]),int(sys.argv[2])))