Mutex frente a Semaphore – Diferencia entre ellos

Diferencia clave entre Mutex y Semaphore

  • Mutex es un mecanismo de bloqueo, mientras que Semaphore es un mecanismo de señalización
  • Mutex es solo un objeto, mientras que Semaphore es un entero
  • Mutex no tiene subtipo, mientras que el semáforo tiene dos tipos: semáforo de conteo y semáforo binario.
  • Semaphore admite la modificación de operaciones de espera y señal, mientras que Mutex solo es modificado por el proceso que puede solicitar o liberar un recurso.
  • Semaphore El valor se modifica mediante las operaciones wait() y signal(), por otro lado, las operaciones Mutex se bloquean o desbloquean.

Diferencia entre Mutex y Semaphore
Diferencia entre Mutex y Semaphore

Aquí, he analizado la diferencia entre Mutex y Semaphore y evaluará exhaustivamente sus pros y sus contras.

Datos comunes sobre Mutex y Semaphore

Basándome en mi práctica, aquí hay algunos datos comunes sobre Mutex vs. Semaphore:

  • Sólo una tarea puede adquirir el mutex. Por tanto, un mutex tiene propiedad y sólo el propietario puede liberarlo.
  • Las razones para usar mutex y semáforo son diferentes, tal vez debido a la similitud en su implementación, un mutex se denominaría semáforo binario.
  • Un error muy conocido es que Mutexes y Semaphores son casi iguales, con la única diferencia de que un Mutex es capaz de contar hasta 1, mientras que SemaphorePuede contar del 0 al N.
  • Siempre existe incertidumbre entre el semáforo binario y el mutex. Es posible que escuche que un mutex es un semáforo binario, lo cual no es correcto.

¿Qué es Semaphore?

con semáforo es simplemente una variable que no es negativa y se comparte entre subprocesos. Un semáforo es un mecanismo de señalización, y un subproceso que está esperando un semáforo puede recibir señales de otro subproceso. Utiliza dos operaciones atómicas, 1) esperar y 2) enviar señales para el sincronización de procesos.

A semáforo permite o no permite el acceso al recurso, lo que depende de cómo esté configurado.

El uso del sitio web de Semaphore

En el caso de un solo buffer, podemos separar el buffer de 4 KB en cuatro buffers de 1 KB. Semaphore Se pueden asociar estos cuatro buffers, lo que permite que los usuarios y productores trabajen en diferentes buffers al mismo tiempo.

Ventajas de Semaphore

En mi práctica, estos son los aspectos positivos clave del uso de semáforos:

  • Permite que más de un hilo acceda a la sección crítica.
  • SemaphoreLos s son independientes de la máquina.
  • SemaphoreLos s se implementan en el código independiente de la máquina del microkernel.
  • No permiten que múltiples procesos ingresen a la sección crítica.
  • Como hay una apretada agenda de espera en Semaphore, nunca se pierden tiempo ni recursos en el proceso.
  • Son independientes de la máquina, por lo que deben ejecutarse en el código independiente de la máquina del microkernel.
  • Permiten una gestión flexible de los recursos.

Desventajas de Semaphores

Estos son los inconvenientes del semáforo que he encontrado.

  • Una de las mayores limitaciones de un semáforo es la inversión de prioridad.
  • El sistema operativo debe realizar un seguimiento de todas las llamadas al semáforo de espera y de señalización.
  • Su uso nunca se impone, sino que es únicamente por convención.
  • Para evitar bloqueos en el semáforo, se deben esperar y Signal Las operaciones deben ejecutarse en el orden correcto.
  • Semaphore La programación es un método complejo, por lo que existen posibilidades de no lograr la exclusión mutua.
  • Tampoco es un método práctico para uso a gran escala ya que su uso conduce a una pérdida de modularidad.
  • Semaphore es más propenso a errores del programador.
  • Puede causar punto muerto o violación de exclusión mutua debido a un error del programador.

¿Qué es Mutex?

La forma completa de Mutex es Objeto de exclusión mutua. Es un tipo especial de semáforo binario que se utiliza para controlar el acceso al recurso compartido. Incluye un mecanismo de herencia de prioridad para evitar problemas de inversión de prioridad extendida. Permite que las tareas actuales de mayor prioridad se mantengan en estado bloqueado durante el menor tiempo posible. Sin embargo, la herencia de prioridad no corrige la inversión de prioridad, sino que sólo minimiza su efecto.

Uso de exclusión mutua

Un mutex proporciona exclusión mutua, que puede ser tanto para el productor como para el consumidor, que pueden tener la clave (mutex) y continuar con su trabajo. Mientras el productor llena el búfer, el usuario debe esperar, y viceversa. En el bloqueo de mutex, en todo momento, solo un único subproceso puede trabajar con todo el búfer.

Ventajas de Mutex

Por lo que he observado, estos son los beneficios clave de Mutex:

  • Los mutex son simples bloqueos que se obtienen antes de ingresar a su sección crítica y luego liberarla.
  • Dado que solo hay un subproceso en su sección crítica en un momento dado, no hay condiciones de carrera y los datos siempre permanecen consistentes.

Desventajas de Mutex

En mi práctica, he identificado varias desventajas de Mutex.

  • Si un subproceso obtiene un bloqueo y se pone en suspensión o se le adelanta, es posible que el otro subproceso no pueda avanzar. Esto puede provocar hambruna.
  • No se puede bloquear ni desbloquear desde un contexto diferente al que lo adquirió.
  • Sólo se debe permitir un hilo en la sección crítica a la vez.
  • La implementación normal puede provocar un estado de espera ocupado, lo que desperdicia tiempo de CPU.

Diferencia entre Semaphore y exclusión mutua

Según lo que he aprendido trabajando con ellos, así es como Mutexes y Semaphoredifieren:

Semaphore frente a exclusión mutua
Semaphore frente a exclusión mutua
parámetros Semaphore Mutex
Mecanismo Es un tipo de mecanismo de señalización. Es un mecanismo de bloqueo.
Tipo de datos Semaphore es una variable entera. Mutex es solo un objeto.
Modificación Las operaciones de espera y señal pueden modificar un semáforo. Es modificado únicamente por el proceso que puede solicitar o liberar un recurso.
Gestión de recursos Si no hay ningún recurso libre, el proceso requiere un recurso que debe ejecutar la operación de espera. Debe esperar hasta que el recuento del semáforo sea mayor que 0. Si está bloqueado, el proceso tiene que esperar. El proceso debe mantenerse en cola. Solo es necesario acceder a este cuando el mutex está desbloqueado.
Hilo Puede tener múltiples hilos de programa. Puedes tener varios subprocesos de programa en mutex, pero no simultáneamente.
Propiedad El valor puede cambiarse mediante cualquier proceso que libere u obtenga el recurso. El bloqueo del objeto lo libera únicamente el proceso que ha obtenido el bloqueo sobre él.
Tipos Tipos de Semaphore están contando semáforos y semáforos binarios. Mutex no tiene subtipos.
Operadesarrollo Semaphore El valor se modifica mediante las operaciones wait() y signal(). El objeto Mutex está bloqueado o desbloqueado.
Ocupación de recursos Está ocupado si se están utilizando todos los recursos y el proceso que solicita el recurso realiza la operación de espera () y se bloquea hasta que el recuento de semáforos sea> 1. En caso de que el objeto ya esté bloqueado, el proceso que solicita recursos espera y el sistema lo pone en cola antes de que se libere el bloqueo.

Conclusión

En mi experiencia, la clave para elegir entre mutex y semáforos es reconocer sus matices operativos. SemaphoreLos s son ideales para sincronizaciones complejas, mientras que los mutex son adecuados para exclusiones mutuas sencillas, lo que garantiza la seguridad de los recursos en contextos más simples.