En 1981, G.L.Peterson descubrió una forma mucho más sencilla de lograr exclusión mutua, lo que volvió obsoleta la solución de Dreker. Este programa fue adaptado del libro de Tanenbaum pagina 106 con fines didácticos por Luis Villamizar
*/
#include
#include
#define FALSE 0
#define TRUE 1
#define N 3 //numero de procesos
int turno; //¿a quien toca?
int interesado[N]; //todos son inicialmente 0(FALSE)
void salir_region(int proceso) //proceso es 0 o 1
{
interesado[proceso]=FALSE;
printf("proceso saliente:%d\n",proceso); //indica salida de región crítica
}
void entrar_region(int proceso)
{
printf("proceso en region critica:%i\n",proceso);
int otro,i; //numero de otros procesos
otro=3-proceso; //lo contrario de proceso
interesado[proceso]=TRUE; //muestra interes
turno=proceso; //establece indicador
while(turno==proceso && interesado[otro]==TRUE) //instrucción nula
{
printf("estoy flotando 15 segundos en espera de turno\n");
printf("proceso bloqueado:%i\n",proceso);
system("sleep 5");
}
}
int main(int argc, char *argv[])
{
entrar_region(0);
salir_region(0);
entrar_region(1);
salir_region(1);
printf("todos los procesos de ejecutaron correctamente\n");
system("PAUSE");
return 0;
}
