Mutex vs Semaphore
Um mutex é análogo a uma única chave de uma sala. Uma pessoa segurando a chave, que é análoga a um fio, é a única pessoa que pode ter acesso à sala. A pessoa com acesso terá que entregar a chave para a próxima pessoa na fila. Portanto, um mutex só pode ser liberado pelo thread 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 threads ao mesmo tempo. Somente um único encadeamento é permitido em uma seção. Isso força os outros threads na fila a aguardar. Antes que um encadeamento tenha acesso, ele terá que esperar até o encadeamento antes de abrir a seção.
Usando a mesma analogia no mutex, os semáforos são o número de chaves semelhantes que podem acessar o mesmo número de salas com bloqueios semelhantes. Um semáforo ou o valor de uma contagem de semáforos dependerá do número de pessoas (threads) que entram ou saem da sala. Se houver 5 quartos e todos estiverem ocupados, a contagem de semáforos será zero. Se dois saírem da sala, a contagem será duas e as duas chaves serão dadas para as próximas duas na fila.
Com isso dito, os semáforos podem ser sinalizados simultaneamente 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áforos.
Então, basicamente, um mutex pode ser considerado um semáforo com o valor de um.
O decremento e o incremento do semáforo dependem se os encadeamentos estão solicitando acesso ao recurso comum ou saindo da seção.
Em teoria, os semáforos mutex e (binários) são semanticamente semelhantes. A implementação do mutex pode ser feita usando semáforos e o contrário é o contrário. No entanto, no sentido prático, eles podem ser um pouco diferentes.
Os mutexes devem ser aplicados apenas para exclusão mútua e os semáforos binários devem ser usados 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 maneira diferente.
Resumo:
1. O Mutex é normalmente usado para serializar o acesso a um recurso comum, enquanto um semáforo é um número de acessos simultâneos..
2. Mutex é como um semáforo com uma contagem de um.
3. O Mutex permite apenas que um único encadeamento tenha acesso, enquanto os semáforos podem ser sinalizados simultaneamente por qualquer encadeamento ou processo.
4. Os semáforos são ideais para sincronização e geralmente são usados para notificação de eventos e exclusão mútua, enquanto o mutex é aplicado apenas para exclusão mútua..