Intentos de dekker
Primer intento
Usamos una variable v que nos indicará cual de los dos procesos tiene su turno.
P0 P1
a: looploop
b: wait until v equals P0 wait until v equals P1
c: critical section critical section
d: set v to P1 set v to P0
e: non-criticalsection non-critical section
f: endloop endloop
• Está garantizada la exclusión mutua porque un proceso llega a su línea c: solamente si el valor de vcorresponde a su identificación (que asumimos siendo única).
• Obviamente, los procesos pueden acceder al recurso solamente alternativamente, que puede ser inconveniente porque acopla los procesosfuertemente.
• Un proceso no puede entrar más de una vez seguido en la sección crítica.
• Si un proceso termina el programa (o no llega más por alguna razón a su línea d:, el otro proceso puederesultar bloqueado.
• La solución se puede ampliar fácilmente a más de dos procesos.
Segundo intento
Intentamos evitar la alternancia. Usamos para cada proceso una variable, v0 para P0 y v1 paraP1 respectivamente, que indica si el correspondiente proceso está usando el recurso.
P0 P1
a: loop loop
b: wait until v1 equals falsewait until v0 equals false
c: set v0 to true set v1 to true
d: critical section critical section
e: set v0 to false set v1 tofalse
f: non-critical section non-critical section
g: endloop endloop
• Ya no existe la situación de la alternancia.
• Sin embargo: el algoritmo noestá seguro, porque los dos procesos pueden alcanzar sus secciones críticas simultáneamente.
El problema está escondido en el uso de las variables de control. v0 se debe cambiar a verdadero solamente...
Regístrate para leer el documento completo.