Semaphore vs Monitor
Semaphore es una estructura de datos que se utiliza para garantizar que varios 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 bloqueos muertos y condiciones de carrera. Monitor es una construcción de lenguaje de programación que también se utiliza para evitar que múltiples procesos accedan a un recurso común al mismo tiempo, por lo que garantiza la exclusión mutua. Los monitores utilizan variables condicionales para lograr esta tarea..
¿Qué es un semáforo??
El semáforo es una estructura de datos que se utiliza para proporcionar la exclusión mutua a las secciones críticas. Los semáforos soportan principalmente dos operaciones llamadas espera (históricamente conocidas como P) y señales (históricamente conocidas 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 otro proceso (subproceso) entre. Cada semáforo está asociado con una cola de procesos en espera. Cuando la operación de espera es llamada 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 es llamada por un hilo, el hilo se bloquea y tiene que esperar en la cola. La operación de señal abre un semáforo y si ya hay un subproceso esperando en la cola, ese proceso puede continuar y si no hay subprocesos esperando en la cola, la señal se recordará para los siguientes subprocesos. Hay dos tipos de semáforos llamados semáforos de exclusión mutua y semáforos de conteo. Los semáforos mutex permiten un acceso único a un recurso y los semáforos de conteo permiten que múltiples hilos accedan a un recurso (que tiene varias unidades disponibles).
Que es un monitor?
Un monitor es una construcción de lenguaje de programación que se utiliza para controlar el acceso a los datos compartidos. Los monitores encapsulan estructuras de datos compartidas, procedimientos (que operan en estructuras de datos compartidas) y sincronización entre invocaciones de procedimientos concurrentes. Un monitor se asegura de que sus datos no estén enfrentados con accesos no estructurados y garantiza 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 permitiendo que solo un hilo ejecute cualquier procedimiento de monitor en un momento dado. Si otro subproceso intenta invocar un método en el monitor, mientras que un subproceso ya está ejecutando un procedimiento en el monitor, el segundo procedimiento se bloquea y tiene que esperar en la cola. Hay dos tipos de monitores llamados monitores Hoare y monitores Mesa. Se diferencian principalmente 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 usa 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 de 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.