pthread multithreading operating-system mutex semaphore monitor

multithreading - pthread - mutex vs semaphore



Monitor vs Mutex (2)

Leí que el mutex es un semáforo con valor 1 (semáforo binario) que se utiliza para imponer la exclusión mutua.

Leí este enlace Semaphore vs. Monitors, ¿cuál es la diferencia? que dice que el monitor ayuda a lograr la exclusión mutua.

¿Alguien puede decirme la diferencia entre mutex y monitor ya que ambos están haciendo lo mismo?


Dado que no ha especificado de qué sistema operativo o idioma / biblioteca está hablando, permítame responder de forma genérica.

Conceptualmente son lo mismo. Pero usualmente se implementan de manera ligeramente diferente

Monitor

Por lo general, la implementación de monitores es más rápida / liviana, ya que está diseñada para la sincronización de subprocesos múltiples dentro del mismo proceso. Además, normalmente, es proporcionado por un marco / biblioteca en sí (en lugar de solicitar el sistema operativo).

Mutex

Por lo general, el kernel del sistema operativo proporciona mutexes y las bibliotecas / marcos simplemente proporcionan una interfaz para invocarlo. Esto los hace pesados ​​/ lentos, pero funcionan a través de hilos en diferentes procesos. El sistema operativo también puede proporcionar funciones para acceder a la exclusión mutua por nombre para compartir fácilmente entre instancias de ejecutables separados (en lugar de usar un identificador que solo puede ser usado por el fork ).


Los monitores son diferentes a los de Mutex, pero pueden considerarse similares en el sentido de que los monitores se construyen sobre Mutex. Vea la descripción del monitor en una imagen en la parte inferior, para mayor claridad.

El monitor es una construcción de sincronización que permite que los subprocesos tengan tanto exclusión mutua (mediante bloqueos) como cooperación, es decir, la capacidad de hacer que los subprocesos esperen a que cierta condición sea verdadera (utilizando el conjunto de espera).

En otras palabras, junto con los datos que implementan un bloqueo, cada objeto Java está asociado lógicamente con los datos que implementan un conjunto de espera. Mientras que los bloqueos ayudan a que los subprocesos funcionen de forma independiente en datos compartidos sin interferirse entre sí, los conjuntos de espera ayudan a que los subprocesos cooperen entre sí para trabajar juntos hacia un objetivo común; Una vez que se libera el bloqueo. Este conjunto de espera ayuda a construir monitores con ayuda adicional de bloqueo ( exclusión mutua ).

Si lo desea, puede ver mi respuesta here , que puede o no ser relevante para esta pregunta.

Puedes encontrar otra discusión relevante aquí

Semaphore vs. Monitors - ¿Cuál es la diferencia?