domingo, 10 de mayo de 2009

/*Solucion de Peterson Combinando la idea de turnarse con la idea de variable de bloqueo y variable de advertencia, un matemático holandés, T.Dekker, fue el primero en idear una solucion en software para el problema de la exclusión mutua que no requiere alternancia estricta. Puede hallarse un análisis del algoritmo de Dekker en Dijktra(1965).
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;
}

1 comentario:

Unknown dijo...

AMIGO UNA CONSULTA EL ALGORTIMO QUE PUSISTE DE ALTERNANCIA ESTRICTA ENSTA EN C# Y OTRA CONSULTA PODRIAS COLOCAR EL ALGORTIMO CANDADO CUALQUIERCOSA TE DEJO MI MSN ES FRANK_KING_2@HOTMAIL.COM