From: tailor Date: Thu, 24 Nov 2005 03:33:00 +0000 (+0000) Subject: todo X-Git-Tag: darcs_import~17 X-Git-Url: https://git.llucax.com/z.facultad/75.59/filosofos.git/commitdiff_plain/416feeaa1aae8115b27365646eecd94a7da013d4 todo --- diff --git a/src/filosofos.py b/src/filosofos.py index 27c9690..db239ef 100644 --- a/src/filosofos.py +++ b/src/filosofos.py @@ -27,32 +27,50 @@ class filosofo(threading.Thread): 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 @@ -62,16 +80,16 @@ class filosofo(threading.Thread): 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]) + " " - exit + sys.exit() chinos = [] for i in range(int(sys.argv[1])): diff --git a/src/filosofos2.py b/src/filosofos2.py index 5a41148..c86036c 100644 --- a/src/filosofos2.py +++ b/src/filosofos2.py @@ -29,7 +29,6 @@ class filosofo(threading.Thread): 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() @@ -37,7 +36,6 @@ class filosofo(threading.Thread): 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) @@ -47,7 +45,7 @@ class filosofo(threading.Thread): 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) @@ -55,6 +53,8 @@ class filosofo(threading.Thread): 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 @@ -70,12 +70,11 @@ class filosofo(threading.Thread): 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]) + " " - exit + sys.exit() chinos = [] for i in range(int(sys.argv[1])):