else: ind = self.id+1
self.derecho = palitos[ind]
if self.derecho:
+ palitos[ind] = False
print 'Soy '+str(self.id)+' y agarre el palito derecho'
- else: self.derecho = False
-
+ return True
+ else:
+ self.derecho = False
+ return False
+
+ @synchronized('Lock')
+ def dejarPalitoDerecho(self):
+ if self.id+1 == len(palitos): ind = 0
+ else: ind = self.id+1
+ self.derecho = False
+ palitos[ind] = True
+ if self.derecho:
+ print 'Soy '+str(self.id)+' y solte el palito derecho'
+
@synchronized('Lock')
def agarrarPalitoIzquierdo(self):
self.izquierdo = palitos[self.id]
if self.izquierdo:
+ palitos[self.id] = False
print 'Soy '+str(self.id)+' y agarre el palito izquierdo'
- else: self.izquierdo = False
+ return True
+ else:
+ self.izquierdo = False
+ return False
def pensar(self):
- t = self.rnd.randint(0,5)
+ t = self.rnd.randint(1,5)
print 'Soy '+str(self.id)+' y voy a pensar durante '+str(t)+' segundos'
time.sleep(t)
def comer(self):
if self.derecho and self.izquierdo:
- print 'Soy '+str(self.id)+' y voy a comer'
+ t = self.rnd.randint(1,5)
+ print 'Soy '+str(self.id)+' y voy a comer durante '+str(t)+' segundos'
self.comi = self.comi + 1
- self.izquierdo = self.derecho = False
- time.sleep(self.rnd.randint(0,5))
+ time.sleep(t)
if self.id+1 == len(palitos): ind = 0
else: ind = self.id+1
+ self.derecho = self.izquierdo = False
palitos[self.id] = True
palitos[ind] = True
- 'Soy '+str(self.id)+' y solte los palitos'
+ print 'Soy '+str(self.id)+' y solte los palitos'
return True
else: return False
def run(self):
while not self.lleno():
- self.agarrarPalitoDerecho()
- self.agarrarPalitoIzquierdo()
+ if self.agarrarPalitoDerecho():
+ self.agarrarPalitoIzquierdo()
+ else: self.dejarPalitoDerecho()
if not self.comer():
self.pensar()
- else: time.sleep(5) #comiendo
if __name__ == '__main__':
if len(sys.argv) < 3:
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>"
- exit
+ sys.exit()
chinos = []
for i in range(int(sys.argv[1])):
if self.derecho:
print 'Soy '+str(self.id)+' y agarre el palito derecho'
else: self.derecho = False
- semaforos[ind].release()
def agarrarPalitoIzquierdo(self):
semaforos[self.id].acquire()
if self.izquierdo:
print 'Soy '+str(self.id)+' y agarre el palito izquierdo'
else: self.izquierdo = False
- semaforos[self.id].release()
def pensar(self):
t = self.rnd.randint(1,5)
def comer(self):
t = self.rnd.randint(1,5)
if self.derecho and self.izquierdo:
- print 'Soy '+str(self.id)+' y voy a comer '+ str(t) + ' segundos'
+ print 'Soy '+str(self.id)+' y voy a comer '+str(t)+' segundos'
self.comi = self.comi + 1
self.izquierdo = self.derecho = False
time.sleep(t)
else: ind = self.id+1
palitos[self.id] = True
palitos[ind] = True
+ semaforos[self.id].release()
+ semaforos[ind].release()
print 'Soy '+str(self.id)+' y solte los palitos'
return True
else: return False
self.agarrarPalitoIzquierdo()
if not self.comer():
self.pensar()
- else: time.sleep(5) #comiendo
if __name__ == '__main__':
if len(sys.argv) < 3:
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>"
- exit
+ sys.exit()
chinos = []
for i in range(int(sys.argv[1])):