]> git.llucax.com Git - z.facultad/75.59/filosofos.git/commitdiff
todo
authortailor <sagardua@uolsinectis.com.ar>
Thu, 24 Nov 2005 03:33:00 +0000 (03:33 +0000)
committertailor <sagardua@uolsinectis.com.ar>
Thu, 24 Nov 2005 03:33:00 +0000 (03:33 +0000)
src/filosofos.py
src/filosofos2.py

index 27c969063941b4030ab443ec80ae3e3e0275abf3..db239ef5603d6891f646b5ff376e548ca9034bf3 100644 (file)
@@ -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]) + "<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])):
index 5a41148bc77b4c04db77aed87dd39e8b0e98aa1c..c86036c229b628d67a1f97df7b923183e8d4b6a3 100644 (file)
@@ -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]) + "<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])):