Você está na página 1de 2

ALGORITMO DE PETERSON

El algoritmo de Peterson,
Tambin conocido como solucin de Peterson,
Algoritmo de programacin concurrente para exclusin mutua,
Permite a dos o ms procesos o hilos de ejecucin compartir un recurso sin
conflictos,
Utiliza slo memoria compartida para la comunicacin.
Desarrollado en 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.
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.
APLICACIN
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
for-ma 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.

Você também pode gostar