Semáforo vs Mutex
Semaphore es una estructura de datos que se utiliza para garantizar que múltiples procesos no accedan a un recurso común oa una sección crítica al mismo tiempo, en entornos de programación paralelos. Los semáforos se utilizan para evitar puntos muertos y condiciones de carrera. Mutex (objeto de exclusión mutua) también se utiliza para evitar el acceso a un recurso común al mismo tiempo por varios procesos simultáneos.
¿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 espera (históricamente conocida como P) y señal (históricamente conocida como V). La operación de espera bloquea un proceso hasta que se abre el semáforo y la operación de señal permite que ingrese otro proceso (hilo). Cada semáforo está asociado con una cola de procesos en espera. Cuando un subproceso llama a la operación de espera, si el semáforo está abierto, el subproceso puede continuar. Si el semáforo está cerrado cuando un subproceso llama a la operación de espera, el subproceso 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, se permite que el proceso continúe y si no hay subprocesos esperando en la cola, la señal se recuerda para los siguientes subprocesos. Hay dos tipos de semáforos llamados semáforos mutex y semáforos de conteo. Los semáforos mutex permiten un solo acceso a un recurso y los semáforos de conteo permiten que varios subprocesos accedan a un recurso (que tiene varias unidades disponibles).
¿Qué es un Mutex?
Cuando se inicia una aplicación informática, creará un mutex y lo adjuntará a un recurso. Cuando un subproceso utiliza el recurso, se bloquea y otros subprocesos no pueden utilizarlo. 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 subproceso termine con el recurso, se eliminará el bloqueo y el subproceso que está esperando en la cola podrá acceder 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 como varios subprocesos están consumiendo un recurso al mismo tiempo. Pero internamente solo un único subproceso accede al recurso en un momento dado.
¿Cuál es la diferencia entre Semaphore y Mutex?
Aunque tanto los semáforos como los objetos mutex se usan 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 subprocesos que deseen acceder al recurso deben esperar en una cola, hasta que el subproceso actual termine de usar el recurso.