Tanto los semáforos como los monitores se utilizan para resolver el problema de la sección crítica (ya que permiten que los procesos accedan a los recursos compartidos en exclusión mutua ) y para lograr la sincronización de procesos en el entorno de multiprocesamiento.
Monitor :
Una construcción de sincronización de alto nivel de tipo Monitor. Es un tipo de dato abstracto. El tipo Monitor contiene variables compartidas y el conjunto de procedimientos que operan en la variable compartida.
Cuando cualquier proceso desea acceder a las variables compartidas en el monitor, necesita acceder a ellas a través de los procedimientos. Estos procesos se alinean en una cola y solo se les proporciona acceso cuando el proceso anterior libera las variables compartidas. Solo un proceso puede estar activo en un monitor a la vez. El monitor tiene variables de condición.
Sintaxis:
monitor { //shared variable declarations data variables; Procedure P1() { ... } Procedure P2() { ... } . . . Procedure Pn() { ... } }
Semáforo :
un semáforo es un objeto de nivel inferior. Un semáforo es una variable entera no negativa. El valor de Semaphore indica el número de recursos compartidos disponibles en el sistema. El valor del semáforo solo puede modificarse mediante dos funciones, a saber, las operaciones wait() y signal() (aparte de la inicialización).
Cuando cualquier proceso accede a los recursos compartidos, realiza la operación de espera() en el semáforo y cuando el proceso libera los recursos compartidos, realiza la operación de señal() en el semáforo. El semáforo no tiene variables de condición. Cuando un proceso está modificando el valor del semáforo, ningún otro proceso puede modificar simultáneamente el valor del semáforo.
El semáforo se divide además en 2 categorías:
- semáforo binario
- Contando semáforo
Sintaxis:
// Wait Operation wait(Semaphore S) { while (S<=0); S--; } // Signal Operation signal(Semaphore S) { S++; }
Ventajas de los monitores:
- Los monitores son más fáciles de implementar que los semáforos.
- La exclusión mutua en los monitores es automática, mientras que en los semáforos, la exclusión mutua debe implementarse explícitamente.
- Los monitores pueden superar los errores de temporización que se producen al utilizar semáforos.
- Las variables compartidas son globales para todos los procesos en el monitor, mientras que las variables compartidas están ocultas en semáforos.
Ventajas de los semáforos:
- Los semáforos son independientes de la máquina (porque se implementan en los servicios del kernel).
- Los semáforos permiten que más de un hilo acceda a la sección crítica, a diferencia de los monitores.
- En los semáforos no hay rotación, por lo tanto, no hay desperdicio de recursos debido a que no hay espera ocupada.
Publicación traducida automáticamente
Artículo escrito por verma_anushka y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA