next up previous contents
Next: Monitores Up: Exclusión mutua a nivel Previous: Regiones críticas

Regiones críticas condicionales

En muchas situaciones es conveniente controlar el acceso de varios procesos a una región crítica por una condición. Con las regiones críticas simples no se puede realizar tal control. Hace falta otra construcción, por ejemplo:

  V is shared variable
  C is boolean expression
  region V when C do
    code of critical region

En la programación orientada a objectos las regiones críticas condicionales donde la condición refleja el estado actual de un objeto son muy útiles para controlar el acceso al objeto dependiendo de este estado (en Java se puede implementar p.ej. con una construcción de bucle con try).

Las regiones críticas condicionales funcionan internamente de la siguiente manera:

  1. un proceso que quiere entrar en la región crítica espera hasta que tenga permiso
  2. una vez obtenido permiso comprueba el estado de la condición, si la condición lo permite entra en la región, en caso contrario libera el cerrojo y se pone de nuevo esperando en la cola de acceso

Se implementa una región crítica normalmente con dos colas diferentes. Una cola principal controla los procesos que quieren acceder a la región crítica, una cola de eventos controla los procesos que ya han obtenido una vez el cerrojo pero que han encontrado la condición en estado falso. Si un proceso sale de la región crítica todos los procesos que quedan en la cola de eventos pasan de nuevo a la cola principal porque tienen que recomprobar la condición.

Nota que esta técnica puede derivar en muchas comprobaciones de la condición, todos en modo exclusivo, y puede causar perdidas de eficiencia. En ciertas circunstancias hace falta un control más sofisticado del acceso a la región crítica dando paso directo de un proceso a otro.


next up previous contents
Next: Monitores Up: Exclusión mutua a nivel Previous: Regiones críticas
© 2003, Dr. Arno Formella, Universidad de Vigo, Departamento de Informática