Diferença entre Mutex e Semaphore Diferença entre

Anonim

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.