You are on page 1of 3

ALGORITMO DE PETERSON Una solucin posible es la proporcionada por Peterson (1981).

En esta solucin se introduce una variable adicional, que denominaremos turno, que solamente resultar til cuando se produzca un problema de peticin simultnea de acceso a la regin crtica.
(* Exclusin Mutua:Solucin de Peterson*) moduleExclusion_Mutua_P; var flag1,flag2: boolean; turno: integer; procedure bloqueo(var mi_flag, su_flag: boolean; su_turno:integer); begin mi_flag := true; turno := su_turno; while su_flag and (turno = su_turno) do ; end end bloqueo; procedure desbloqueo(var mi_flag: boolean); begin mi_flag := false; end desbloqueo; process P1 begin loop bloqueo(flag1,flag2,2); (* Uso del recurso Seccin Crtica *) desbloqueo(flag1); (* resto del proceso *) end end P1; process P2 begin loop bloqueo(flag2,flag1,1); (* Uso del recurso Seccin Crtica *) desbloqueo(flag2); (* resto del proceso *) end end P2; begin (* Exclusion_Mutua_P*) flag1 := FALSE; flag2 := FALSE; cobegin P1; P2; coend end Exclusion_Mutua_P.

Si slo uno de los procesos intenta acceder a la seccin crtica lo podr hacer sin ningn problema. Sin embargo, si ambos intentan entrar a la vez el valor de turno se pondr a 1 y 2 pero slo un valor de ellos permanecer al escribirse sobre el otro, permitiendo el acceso de un proceso a su regin crtica. El algoritmo permite resolver el problema de la exclusin mutua y garantiza que ambos procesos usarn de forma consecutiva el recurso en el caso de que lo soliciten a la vez y se impedir el cierre

del otro proceso. Si, por ejemplo, P1 ha entrado en su seccin crtica bloqueando el acceso de P2 ste entrar una vez haya finalizado aqul, ya que cuando P1 sale de su regin crtica desactiva su indicador, permitiendo el acceso de P2; si una vez que P1 sale de su seccin crtica P2 no est en ejecucin, P1 deber permanecer en espera hasta que P2 haya entrado y haya desactivado su indicador. De esta manera se evita que P2 pueda quedar relegado por P1 en el uso del recurso, es decir ambos gozan de la misma prioridad en el uso del recurso. ALGORITMO DE DEKKER La solucin al problema de la exclusin mutua que sigue se atribuye al matemtico holands T. Dekker, y fue presentada por Dijkstra en 1968. Se utiliza, al igual que en la solucin de Peterson, una variable turno. Ahora la variable sirve para establecer la prioridad relativa de los dos procesos y su actualizacin se realiza en la seccin crtica, lo que evita que pueda haber interferencias entre los procesos.
(* Exclusin Mutua:Solucin de Dekker*) moduleExclusion_Mutua_D; varflag1,flag2: boolean; turno: integer; procedure bloqueo(var mi_flag, su_flag: boolean; su_turno: integer); begin mi_flag := true; while su_flag do (* otro proceso en la seccin crtica *) if turno = su_turno then mi_flag := false; while turno =su_turno do ; (* espera a que el otro acabe *) end; mi_flag := true; end; end; end bloqueo; procedure desbloqueo (var mi_flag: boolean; su_turno: integer); begin turno := su_turno; mi_flag := false end desbloqueo; process P1 begin loop bloqueo(flag1,flag2,2); (* Uso del recurso Seccin Crtica *) desbloqueo(flag1); (* resto del proceso *) end end P1; process P2 begin loop bloqueo(flag2,flag1,1);

(* Uso del recurso Seccin Crtica *) desbloqueo(flag2); (* resto del proceso *) end end P2; begin (* Exclusion_Mutua_P*) flag1 := FALSE; flag2 := FALSE; turno := 1; cobegin P1; P2; coend end Exclusion_Mutua_D.

El programa se inicia con el valor de turno igual a 1 lo que da prioridad al proceso P1. Si ambos procesos piden a la vez el acceso a su seccin crtica, ponen en activo sus respectivos indicadores y comprueban si el indicador del otro est activado. Ambos encuentran que s, por lo que pasan a evaluar el turno. El segundo se encuentra con que no es su turno, desactiva su indicador y se queda en espera de que lo sea. P1 comprueba que s es su turno y pasa a valorar el estado del indicador de P2, entrar en su seccin crtica y dar el turno a P2 antes de desactivar su indicador. Esto permite que el proceso P2 gane el acceso a su seccin crtica aunque el proceso P1 haga una nueva solicitud de entrar a la regin crtica inmediatamente despus de desactivar su indicador. Los algoritmos de Peterson y Dekker se pueden extender, aunque no de manera sencilla, al caso ms general en el que haya n procesos en ejecucin concurrente; pero no son soluciones adecuadas ya que la espera de acceso a un recurso siempre se realiza de forma ocupada. El proceso se queda permanentemente comprobando una variable, lo que puede suponer un derroche de los recursos del sistema. Si, por ejemplo, se dispone de un nico procesador, ste tendr que ocupar parte de su tiempo en la comprobacin reiterada de una variable.