Está en la página 1de 4

El algoritmo de Peterson, tambin conocido como solucin de Peterson, es un algoritmo de programacin concurrente para exclusin mutua, que permite

a dos o ms procesos o hilos de ejecucin compartir un recurso sin conflictos, utilizando slo memoria compartida para la comunicacin.

Peterson desarroll el primer algoritmo (1981) para dos procesos que fue una simplificacin del algoritmo de Dekker para dos procesos. Posteriormente este algoritmo fue generalizado para N procesos.

El algoritmo de Dekker resuelve el problema de la exclusin mutua pero con un programa complejo, difcil de seguir y cuya correccin es difcil de demostrar. Peterson desarrollado una solucin simple y elegante. Como antes, la variable global seal indica La posicin de cada proceso con respecto a la exclusin mutua y la variable global turno resuelve los conflictos de simultaneidad.

ALGORITMO DE PETERSON Un matemtico holands, T- Dekker combin la idea de los turnos y la idea de las variables de cerradura y las variables de advertencia con lo que fue el primero en disear una solucin en software a! problema de exclusin mutua sin el requisito de la de alternancia estricta para un anlisis del algoritmo de Dekker. En 1981. G. L. Peterson descubri una forma ms sencilla para conseguir la exclusin mutua, lo cual hizo obsoleta la solucin de Dekker. Este algoritmo consta de dos procedimientos escritos en ANS C, lo que indica que hay que proporcionar prototipos de funcin para todas las funciones definidas y utilizadas. Es convencional la agrupacin de dichos prototipos en archivos de encabezado. El primer rengln; de la figura incluye todos esos prototipos. Antes de utilizar las variables compartidas (es decir, antes de entrar a su regin critica) cada proceso llama a enter region con su propio nmero de procesos O 1, como parmetro. Esta llamada provoca una espera, en caso necesario hasta que pueda entrar. Este algoritmo soluciona el problema de la seccin crtica y evite que un proceso quede en espera mientras que otro proceso este en su seccin no crtica indude "prototypes.h" . . #define false 0 #define true 1 #define N 2 . / Numero de procesos */ int turn: /* de quin es e1 turno? */ int interested[N) / todos los valores Iniciales son 0(FALSE) / void enter_region(int process) /* proceso: quin entra (0 O 1) */ { int other; . /* numero de los otros procesos / other = 1 - process: /* el opuesto de proceso I interested(process) - TRUE: / muestra que usted esta interesado */ turn = process: . /* establece bandera */ while (turn proceess && interested[otherl -- TRUE) /* enunciado-null '.' void 1eave_region(int process) / proceso: quin sale (0 6 1) / intereseted(process) - FALSE: " 7* indica 1a salida de la regin critica */ Despus de terminar con las variables compartidas. el proceso llama a leave_region para indicar que ha terminado y permitir la entrada de otro proceso, si as lo desea. Veamos cmo funciona esta solucin. En principio, ningn proceso esta en su regin critica. Ahora, el proceso 0 llama a enter_region. Indica su inters por determinar el elemento de su arreglo y hace turn=0. Puesto que el proceso 1 no est interesado, enier_region regresa en forma inmediata. Si el proceso 1 llama

ahora a enter_region. esperar hasta que interested[0}=FALSE. evento que slo ocurre cuando el proceso O llama a leave_region. Consideremos ahora el caso en que ambos procesos llaman a enter_region de forma casi simultneamente. Ambos almacenarn su nmero de proceso en turn. Slo cuenta la ltima operacin; la primera se pierde. Supongamos que el proceso 1 almacena el n-mero en ltimo lugar, por lo que turn=1. Cuando ambos procesos lleguen al enunciado while. el proceso O se ejecuta O veces y entra a su regin critica. El proceso 1 hace un ciclo y no entra a su regin critica.

También podría gustarte