Exclusion mutua

Solo disponible en BuenasTareas
  • Páginas : 2 (472 palabras )
  • Descarga(s) : 0
  • Publicado : 5 de diciembre de 2011
Leer documento completo
Vista previa del texto
Exclusión Mutua
Dr. Víctor J. Sosa
vjsosa@cinvestav.mx

Problema de Exclusión Mutua
• Cuando accedemos a datos compartidos es importante sincronizar el acceso para que los datos no se pierdan. •Las operaciones de actualización de información actuales no son atómicas: x = x +1.
LD R, x ; carga x al registro R INC R; incrementa el registro R ST R, x; almacena el registro R en x

Ejemplode una Interfaz Java mínima para exclusión mutua
Public interface Lock { public void accederSC(int pid); public void liberarSC(int pid); }

Algoritmo de Peterson
Class Intento1 implements Lock {boolean puertaAbierta = true;
Ejemplo de una propuesta para manejar dos procesos intentando utilizar una sección crítica (SC)

public void accederSC(int i) { while (!puertaAbierta) ; // Esta ocupadopuertaAbierta = false; } public void liberarSC(int i) { puertaAbierta = true; } }
¿cómo se quién cambio primero la variable puertaAbierta? Problema: No garantiza la exclusión mutua!

Algoritmo dePeterson
Class Intento2 implements Lock { boolean quieroSC[] = {false, false};
Ejemplo de una propuesta para manejar dos procesos intentando utilizar una sección crítica (SC)

public voidaccederSC(int i) { quieroSC[i] = true; // manifiesto mi intencion de entrar while (quieroSC[1- i]) ; // Esta ocupado } public void liberarSC(int i) { quieroSC[i] = false; } }
¿y si ambos manifiestan suintención de entrar? Problema: Deadlock!!

Algoritmo de Peterson
Class Intento3 implements Lock { int turno = 0; public void accederSC(int i) { while (turno == 1 - i) ; // Esta ocupado } public voidliberarSC(int i) { turno = 1 - i; } }
Igualdad de oportunidades, a cada quien se le sede un turno ala vez. Exclusion Mutua Deadlock Hambruna
Ejemplo de una propuesta para manejar dos procesosintentando utilizar una sección crítica (SC)

☺ ☺

Algoritmo de Peterson*
Class AlgoritmoPeterson implements Lock { boolean quieroSC[] = {false, false}; int turno = 1; public void accederSC(int i) {...
tracking img