Diferença entre Mutex e Semaphore Diferença entre
Mutex versus Semaphore
Um mutex é análogo a uma única chave para uma sala. Uma pessoa que segura a chave, que é análoga a um fio, é a única que pode ter acesso à sala. A pessoa com acesso terá que desistir da chave para a próxima pessoa em linha. Portanto, um mutex só pode ser liberado pelo fio que o adquire.
Um mutex normalmente é usado para serializar o acesso a uma seção de um código reentrante "" um tipo de código que não pode ser executado por vários segmentos ao mesmo tempo. Somente um único segmento é permitido em uma seção. Isso força os outros tópicos na fila a aguardar. Antes que um segmento ganhe acesso, ele terá que esperar até o segmento antes que ele desista da seção.
Usando a mesma analogia no mutex, os semáforos são o número de teclas semelhantes que podem acessar o mesmo número de salas com bloqueios semelhantes. Um semáforo ou o valor de uma contagem de semáforo dependerá do número de pessoas (threads) que entram ou saem da sala. Se houver 5 salas e todos estiverem ocupados, então a contagem de semáforos é zero. Se dois deixarem a sala, então a contagem é duas e as duas chaves são dadas aos dois próximos na fila.
Com isso dito, os semaforos podem ser simultaneamente sinalizados por qualquer thread ou processo e são ideais para aplicativos que requerem sincronização. No entanto, os semáforos são usados para restringir efetivamente o número de usuários simultâneos de um recurso comum com base na contagem máxima de semáforo.
Então, basicamente, um mutex pode ser considerado como um semáforo com um valor de um.
O decremento e o incremento do semáforo dependem de se os segmentos estão solicitando acesso ao recurso comum ou deixando a seção.
Em teoria, mutex e (binário) semaforos são semanticamente semelhantes. A implementação do mutex pode ser feita usando semáforos e, portanto, é o contrário. No entanto, no sentido prático, eles podem ser um pouco diferentes.
Mutexes destinam-se a ser aplicados apenas para exclusão mútua e os semaforos binários destinam-se a ser utilizados para exclusão mútua e notificação de eventos. Embora sejam muito semelhantes em termos de implementação e semântica geral, eles são usados de forma diferente.
Resumo:
1. Mutex normalmente é usado para serializar o acesso a um recurso comum enquanto um semáforo é uma série de acessos simultâneos.
2. Mutex é como um semáforo com uma contagem de um.
3. O Mutex só permite que um único segmento tenha acesso enquanto os semaforos podem ser simultaneamente sinalizados por qualquer thread ou processo.
4. Os semaforos são ideais para sincronização e frequentemente utilizados para notificação de eventos e exclusão mútua, enquanto o mutex é aplicado apenas para exclusão mútua.