Diferencia entre revisiones de «Algoritmo de Peterson»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
m Revertidos los cambios de 150.214.57.7 a la última edición de 84.121.219.67
Línea 15: Línea 15:
// fin de la sección crítica // fin de la sección crítica
// fin de la sección crítica // fin de la sección crítica
bandera[0] = 0 bandera[1] = 0
bandera[0] = 0 bandera[1] = 1
</source>
</source>



Revisión del 16:07 9 feb 2010

El algoritmo de Peterson es un algoritmo de programación concurrente para exclusión mutua, que permite a dos o más procesos o hilos de ejecución compartir un recurso sin conflictos, utilizando sólo memoria compartida para la comunicación.

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

Algoritmo para dos procesos

  bandera[0] = 0
  bandera[1] = 0
  turno      = 0 
  p0: bandera[0] = 1                            p1: bandera[1] = 1
      turno = 1                                 turno = 0
      while( bandera[1] && turno == 1 );        while( bandera[0] && turno == 0 );
                //no hace nada. espera.                               //no hace nada. espera. 
      // sección crítica                        // sección crítica
                                           
      // fin de la sección crítica              // fin de la sección crítica
      bandera[0] = 0                            bandera[1] = 1

Algoritmo para N procesos (pseudo-codigo)

// Variables compartidas
flag: array[0..N-1] of -1..n-2; /* inicializada a –1 */
turn: array[0..N-2] of 0..n-1; /* inicializada a 0 */

// Protocolo para Pi ( i=0,...,N-1)
j:0..N-2; /* variable local indicando la etapa */
for j = 0 to N-2
{
   flag[i] = j;
   turn[j] = i;
   while [( k  i : flag[k]  j)  (turn[j] == i)] do; 
}
<sección crítica>
flag[i] = -1;

Véase también