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