Comparación entre semáforo y mutex.
Mutex
Los conceptos sobre el mutex son muy parecidos a los de bloqueo. Cuando se quiere entrar en una habitación , se debe adquirir la cerradura entonces tener el permiso para entrar. En la ciencia de la computación, el mutex se utiliza para proteger la sección crítica de la prevención de otro hilo de acceso mutuo el mismo código para evitar la condición de carrera.
Thread A Thread Bacquire mutex acquire mutex ... it will block
do something critical do something critical
release mutex release lock
Es una llave de un baño. Una persona puede tener la llave -ocupar el retrete- a la vez. Cuando termina, la persona da (libera) la llave a la siguiente persona en la cola.
Oficialmente: «Los mutex se utilizan normalmente para serializar el acceso a una sección de código reentrante que no puede ser ejecutada concurrentemente por más de un hilo. Un objeto mutex sólo permite que un hilo entre en una sección controlada, obligando a otros hilos que intenten acceder a esa sección a esperar hasta que el primer hilo haya salido de esa sección.»
Ref: Symbian Developer Library
Semaphore
No como los mutex se adquieren o esperan a ser adquiridos. El semáforo puede establecer el valor inicial a N>1. Podemos utilizar el valor para restringir cuántos usuarios de este proceso podrán acceder a la sección crítica.
La principal diferencia entre semáforo y mutex es que el mutex sólo puede ser liberado por el usuario que lo posee. Pero en el mecanismo de semáforo cualquier usuario puede señalar a cualquier semáforo específico en el kernel. Esto puede asegurar la concurrencia de los hilos.
A continuación se muestra el concepto de semáforo, cuando el hilo A está bien, entonces señala al hilo B y el hilo B comienza a hacer algo.
Este mecanismo asegura la concurrencia en el proceso.
Task A Task B
... Take BinSemaphore <== wait for something
Do Something Noteworthy
Give BinSemaphore do something <== unblocks
Es el número de llaves de aseo idénticas libres. Ejemplo, digamos que tenemos cuatro aseos con cerraduras y llaves idénticas. El recuento del semáforo -el recuento de llaves- se establece en 4 al principio (los cuatro aseos están libres), luego el valor del recuento se va decrementando a medida que la gente va entrando. Si todos los aseos están llenos, es decir, no quedan llaves libres, el recuento del semáforo es 0. Ahora, cuando eq. una persona sale del aseo, el semáforo se incrementa a 1 (una llave libre), y se da a la siguiente persona en la cola.
Oficialmente: «Un semáforo restringe el número de usuarios simultáneos de un recurso compartido hasta un número máximo. Los hilos pueden solicitar acceso al recurso (decrementando el semáforo), y pueden señalar que han terminado de usar el recurso (incrementando el semáforo).»
Ref: Symbian Developer Library
Riesgos
El uso del mutex puede encontrarse con la Inversión de Prioridad. Deberá diseñar cuidadosamente el escenario basado en mutex.