Práctico 5 - Ejercicio 5 - Formulación de bloqueo en procedimiento P del semáforo.

Práctico 5 - Ejercicio 5 - Formulación de bloqueo en procedimiento P del semáforo.

de Bruno Alberto Szilagyi Ibarra -
Número de respuestas: 1
Buenos días, en mi grupo de estudio intentamos hacer el ejercicio planteado y llegamos a lo siguiente:


PROCEDURE P_bin
BEGIN
   P(mutex);
   IF(hasCapacity) {

     hasCapacity = false;
     V(mutex);
   } ELSE {
  
  ->   V(mutex);
     P(wait);
   }
   
END P_bin

Entonces el problema fue al realizar V(mutex) ya estaríamos habilitando a que se ejecutase algún potencial V_bin bloqueado al intentar acceder a la zona crítica y podría ejecutar completamente antes de que nuestro proceso quede en wait, no depertando al mismo por el efecto del V (ya que quedaría bloqueado luego de la ejecuciòn del V_bin).

Entonces bàsicamente nuestras inquietudes son las siguientes:
  • En el caso de que nuestro P estuviese correcto, no habrìa quedado "indivisible" ya que "libero" la mutua exclusiòn dejando una sentencia para ejecutar concurrentemente "P(wait)".
  • En el caso de que nuestro P estuviese correcto, no nos damos cuenta como realizar el V_bin para solucionar el caso mencionado.
Añadir también un vínculo a otra discusión donde la solución planteada tiene el mismo problema aparente: Acá

Desde ya, muchas gracias por la ayuda!!
En respuesta a Bruno Alberto Szilagyi Ibarra

Re: Práctico 5 - Ejercicio 5 - Formulación de bloqueo en procedimiento P del semáforo.

de Ignacio Rafael Ferreira Urrutia -

Puede ser que precises un contador para saber cuando cambiar la variable hasCapacity a true.

Para hacer el V podés intentar hacer algo parecido pero evaluando la variable contador.

Me parece que está bien ese orden porque sino como es una zona crítica ese semáforo se tiene que inicializar en 1, entonces si no deja el recurso antes de bloquearse, nadie más puede entrar a la zona crítica porque la tiene retenida el proceso y se forma deadlock, el V que podría despertarlo precisa un recurso que tiene el P retenido.

Saludos