Actualmente estoy asistiendo al curso de programación concurrente en mi universidad y recientemente comenzamos a hablar sobre el concepto de monitor. Si bien entiendo la necesidad de la exclusión mutua, no entiendo por qué usaría un monitor para eso.
Según tengo entendido, un monitor garantiza que exactamente uno o ningún proceso esté en la sección crítica en todo momento. Podemos lograr exactamente eso con un semáforo. Además, implementamos monitores (o al menos una posibilidad para implementarlos es) con semáforos.
Entonces, ¿por qué debería implementar algo que hace exactamente lo mismo que un semáforo con un semáforo? ¿Qué beneficios obtengo?
fuente
Finalmente discutimos por qué usarías un monitor en lugar de un semáforo en la conferencia de hoy.
Básicamente se trata de esto: el monitor y el semáforo son igualmente expresivos, lo que significa que puede encontrar una solución para un problema con un monitor donde originalmente se utilizó un semáforo y viceversa.
Bueno, eso ya lo sabíamos, ¿por qué usarías un monitor en lugar de un semáforo?
Preferencia personal. Normalmente, una aplicación de escritorio usaría monitores, dejando menos posibilidades de errores, pero, como compensación, tener una estructura relativamente hinchada. Los semáforos, por otro lado, a menudo se usan en los sistemas operativos, ya que son una estructura liviana, pero dejan más posibilidades de errores.
Supongo que podemos concluir que es una decisión situacional si necesita o no quiere usar un monitor o un semáforo. Si construye un sistema en tiempo real, es posible que desee ir con un semáforo, si está construyendo un programa de oficina, también puede ir con un monitor.
fuente
Eche un vistazo a, por ejemplo, "El pequeño libro de los semáforos"por Allen B. Downey. establece y resuelve muchos problemas de sincronización. Verifique particularmente las soluciones fallidas, y verá que los semáforos son un mecanismo de muy bajo nivel, muy poderoso pero extremadamente fácil de usar, donde los errores simples tienen consecuencias terribles (empeoradas aún más por la operación inherente no determinista de los programas concurrentes). Por ejemplo, es fácil olvidar imponer la exclusión mutua, operar en el semáforo incorrecto, etc. Los monitores ofrecen soluciones preempaquetadas para los casos más utilizados y llevan consigo la mayoría de las ventajas de la programación orientada a objetos (es decir, usted sabe que la única forma de meterse con las variables administradas por el monitor es a través de sus operaciones). La desventaja es que no se pueden adaptar fácilmente a lenguajes no orientados a objetos,
fuente