Semaphore vs Mutex
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. Mutex (objeto de exclusión mutua) también se usa para evitar el acceso a un recurso común al mismo tiempo por varios procesos concurrentes.
¿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 Mutex?
Cuando se inicia una aplicación informática, creará una exclusión mutua y la adjuntará a un recurso. Cuando un subproceso utiliza el recurso, se bloquea y otros subprocesos no pueden usarlo. Si otro hilo quiere usar el mismo recurso, tendrá que hacer una solicitud. Luego, ese hilo se colocará en una cola hasta que el primer hilo termine con el recurso. Cuando el primer hilo termine con el recurso, el bloqueo se eliminará y el hilo que está esperando en la cola puede obtener acceso al recurso. Si hay varios subprocesos esperando en la cola, se les da acceso de forma rotativa. Prácticamente, cuando el mutex alterna el acceso a un recurso entre varios subprocesos, será visible ya que varios subprocesos consumen un recurso al mismo tiempo. Pero internamente solo un solo hilo está accediendo al recurso en un momento dado.
¿Cuál es la diferencia entre Semaphore y Mutex??
Aunque, tanto los semáforos como los objetos de exclusión mutua se utilizan para lograr la exclusión mutua en entornos de programación paralelos, tienen algunas diferencias. Un objeto mutex solo permite que un solo hilo consuma un recurso o una sección crítica, mientras que los semáforos permiten un número restringido de accesos simultáneos a un recurso (bajo un número máximo permitido). Con los objetos mutex, otros subprocesos que desean acceder al recurso tienen que esperar en una cola, hasta que el subproceso actual termine de usar el recurso.