Considere la siguiente solución al problema de sincronización productor-consumidor. El tamaño del búfer compartido es N. Se definen tres semáforos vacío, lleno y mutex con valores iniciales respectivos de 0, N y 1. El semáforo vacío indica el número de ranuras disponibles en el búfer, para que el consumidor pueda leer. El semáforo completo indica el número de ranuras disponibles en el búfer, para que el productor escriba. Las variables de marcador de posición, indicadas por P, Q, R y S, en el siguiente código se pueden asignar vacías o llenas . Las operaciones de semáforo válidas son: wait() y sigmal() .
¿Cuál de las siguientes asignaciones a P, Q, R y S producirá la solución correcta?
(A) P: lleno , Q: lleno , R: vacío , S: vacío
(B) P: vacío , Q: vacío , R: lleno , S: lleno
(C) P: lleno , Q: vacío , R: vacío , S: lleno
(D) P: vacío , Q: lleno , R: lleno , S: vacío
Respuesta: (C)
Explicación: Dado,
Vacío = 0
Completo = N
Mutex = 1
Dado que el valor del semáforo vacío es 0, no puede esperar el semáforo vacío en el primer intento.
Nota: el semáforo vacío indica el número de ranuras llenas, por lo que el proceso del productor debe tratar con semáforos vacíos y mutex. el semáforo completo indica el número de ranuras vacías, por lo que el proceso del consumidor debe tratar con semáforos completos y mutex.
La opción (A) provoca inanición.
La OPción (B) provoca inanición.
Opción (D) dado que el número de ranuras llenas es 0 inicialmente indicado por un semáforo vacío , por lo que el proceso del consumidor no puede consumir. Entonces, esta implementación es incorrecta.
Solo P: vacío , Q: lleno , R: lleno , S: vacío es el orden correcto para garantizar una implementación sin puntos muertos y sin hambre.
La opción (C) es correcta.
Vea la explicación del video de GeeksforGeeks:
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