Semáforo vs mutex
Semaphore es una estructura de datos que se utiliza para asegurarse de que múltiples 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 cerraduras muertas 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??
Semaphore es una estructura de datos que se utiliza para proporcionar exclusión mutua a secciones críticas. Los semáforos admiten principalmente dos operaciones llamadas WAIT (históricamente conocidas como P) y Signal (históricamente conocida 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 ingrese otro proceso (subproceso). Cada semáforo se asocia con una cola de procesos de espera. Cuando la operación de espera se llama 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 se llama por un hilo, el hilo está bloqueado y tiene que esperar en la cola. La operación de la señal abre un semáforo y si ya hay un hilo esperando en la cola, ese proceso puede continuar y si no hay hilos que esperen en la cola, la señal se recuerda para los siguientes subprocesos. Hay dos tipos de semáforos llamados semáforos mutex y contando semáforos. Los semáforos mutex permiten un solo acceso a un recurso y semáforos de conteo permiten que múltiples subprocesos accedan a un recurso (que tiene varias unidades disponibles).
Que es un mutex?
Cuando se inicia una aplicación de computadora, creará un mutex y la conectará a un recurso. Cuando el recurso es utilizado por un hilo, está bloqueado y otros hilos no pueden usarlo. Si otro hilo quiere usar el mismo recurso, tendrá que hacer una solicitud. Entonces ese hilo se colocará en una cola hasta que el primer hilo esté terminado con el recurso. Cuando el primer hilo termina con el recurso, el bloqueo se eliminará y el hilo que está esperando en la cola puede obtener acceso al recurso. Si hay múltiples hilos que esperan en la cola, se les da acceso de forma giratoria. Prácticamente, cuando el mutex alterna el acceso a un recurso entre varios hilos, será visible ya que múltiples hilos están consumiendo un recurso al mismo tiempo. Pero internamente solo un solo hilo está accediendo al recurso en un momento determinado.
¿Cuál es la diferencia entre Semaphore y Mutex??
Aunque, tanto los semáforos como los objetos mutex 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 objetos mutex, otros hilos que desean acceder al recurso tienen que esperar en una cola, hasta que el hilo actual esté terminado utilizando el recurso.