Prueba de algoritmos | Colocación de Sudo [1.6] | Pregunta 9

Considere el siguiente procedimiento para el problema del productor-consumidor que usa semáforos y elija la declaración correcta:

semaphore n = 0;
semaphore s = 1;
  
// Producer Function
void producer(){
    while(true){
        produce();
        semWait(s);
        addToBuffer();
        semSignal(s);
        semSignal(n);
    }
}
// Consumer function
void consumer(){
    while(true){
        semWait(s);
        semWait(n);
        removeFromBuffer();
        semSignal(s);
        consume();
    }
}

(A) El productor podrá agregar un artículo al búfer, pero el consumidor nunca podrá consumirlo.
(B) El consumidor no retirará más de un artículo de la reserva.
(C) Se produce interbloqueo si el consumidor logra adquirir semáforos cuando el búfer está vacío.
(D) El valor inicial para el semáforo n debe ser 1 y no 0 para una operación sin interbloqueos.

Respuesta: (C)
Explicación:Inicialmente, no hay ningún elemento en el búfer. Semáforo s=1 y semáforo n=0. Suponemos que inicialmente el control va al consumidor cuando el búfer está vacío. semWait(s) disminuye el valor del semáforo ‘s’. Ahora, s = 0 y semWait(n) decrementa el valor del semáforo ‘n’. Dado que el valor del semáforo ‘n’ se vuelve menor que 0, el control se atasca en el ciclo while de la función semWait() y surge un interbloqueo. Por lo tanto, se produce un interbloqueo si el consumidor logra adquirir semáforos cuando el búfer está vacío.
Cuestionario de esta pregunta
Comente a continuación si encuentra algo incorrecto en la publicación anterior

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *