SEMAFORE VS MONITOR
Semaphore es una estructura de datos que se utiliza para asegurarse de que múltiples procesos no accedan a un recurso común o una sección crítica al mismo tiempo, en entornos de programación paralelos. Los semáforos se utilizan para evitar cerraduras muertas y condiciones de carrera. Monitor es una construcción de lenguaje de programación que también se utiliza para evitar múltiples procesos que acceden a un recurso común al mismo tiempo, por lo tanto, garantiza la exclusión mutua. Los monitores usan variables condicionales para lograr esta tarea.
¿Qué es un semáforo??
Semaphore es una estructura de datos que se utiliza para proporcionar exclusión mutua a secciones críticas. Los semáforos admiten principalmente dos operaciones llamadas WAIT (históricamente conocidas como P) y Signal (históricamente conocida como V). La operación de espera bloquea un proceso hasta que el semáforo esté abierto y la operación de señal permite que ingrese otro proceso (subproceso). Cada semáforo se asocia con una cola de procesos de espera. Cuando la operación de espera se llama por un hilo, si el semáforo está abierto, el hilo puede continuar. Si el semáforo se cierra cuando la operación de espera se llama por un hilo, el hilo está bloqueado y tiene que esperar en la cola. La operación de la señal abre un semáforo y si ya hay un hilo esperando en la cola, ese proceso puede continuar y si no hay hilos que esperen en la cola, la señal se recuerda para los siguientes subprocesos. Hay dos tipos de semáforos llamados semáforos mutex y contando semáforos. Los semáforos mutex permiten un solo acceso a un recurso y semáforos de conteo permiten que múltiples subprocesos accedan a un recurso (que tiene varias unidades disponibles).
¿Qué es un monitor??
Un monitor es una construcción de lenguaje de programación que se utiliza para controlar el acceso a datos compartidos. Los monitores encapsulan las estructuras de datos compartidos, los procedimientos (que operan en estructuras de datos compartidas) y la sincronización entre las invocaciones de procedimientos concurrentes. Un monitor se asegura de que sus datos no se enfrenten a accesos no estructurados y garantizan que las huellas (que acceden a los datos del monitor a través de sus procedimientos) interactúan de manera legítima. Un monitor garantiza la exclusión mutua al permitir que solo un hilo ejecute cualquier procedimiento de monitor en un momento determinado. Si otro subproceso intenta invocar un método en el monitor, mientras un hilo ya está ejecutando un procedimiento en el monitor, entonces el segundo procedimiento está bloqueado y tiene que esperar en la cola. Hay dos tipos de monitores llamados monitores Hoare y monitores de mesa. Principalmente difieren en su semántica de programación.
¿Cuál es la diferencia entre semáforo y monitor??
Aunque tanto los semáforos como los monitores se utilizan para lograr la exclusión mutua en entornos de programación paralelos, difieren en las técnicas utilizadas para lograr esta tarea. En los monitores, el código que se utiliza para lograr la exclusión mutua está en un solo lugar y está más estructurado, mientras que el código para los semáforos se distribuye como llamadas a la función de espera y señal. Además, es muy fácil cometer errores al implementar semáforos, mientras que hay muy pocas posibilidades de cometer errores al implementar monitores. Además, los monitores usan variables de condición, mientras que los semáforos no.