Mutex vs Semaphore
O Mutex é usado para fornecer acesso serializado a uma parte de um código reentrante que não pode ser executado em paralelo por mais de um thread. Um mutex garante que apenas um código possa acessar a seção controlada por vez. Para obter acesso, outros códigos são feitos para aguardar a saída do primeiro código. Você pode considerar como uma chave para um quarto. A pessoa que tem acesso a essa chave primeiro vai primeiro. Até o momento em que a pessoa voltar, ninguém mais poderá acessar a sala.
O semáforo dá acesso a um recurso compartilhado a vários usuários simultaneamente. À medida que o número de usuários que acessam o recurso aumenta, a contagem de semáforos diminui. Quando os usuários começam a liberar o recurso, a contagem de semáforos começa a aumentar novamente. É usado por aplicativos que requerem sincronização. O número de usuários simultâneos é restrito com base no limite do semáforo. Um semáforo pode ser pensado como um conjunto de chaves semelhantes a bloqueios semelhantes a um quarto individual, mas essas chaves são limitadas em número. As pessoas que possuem essas chaves podem compartilhar o quarto.
Diferenças entre mutex e semáforo:
1. O Mutex é usado para exclusão mútua, enquanto o semáforo encontra sua utilidade nos dois eventos.
notificação e exclusões mútuas.
2. O Mutex fornece acesso serial a recursos comuns, enquanto o semáforo limita a
o número de acessos simultâneos.
3. Um mutex trabalha com um thread por vez, enquanto o semáforo gerencia vários threads
juntos.
4. O Mutex possui um conceito de proprietário, no qual o processo que bloqueia o mutex pode apenas
reabri-lo. Nenhum dos outros processos pode fazer isso. Mas no caso do semáforo, tal
restrições não existem.
5. Um mutex é um mecanismo de bloqueio, enquanto um semáforo é um mecanismo de sinalização com
em relação à sincronização do acesso a um recurso.
Resumo:
1. Semanticamente e em teoria, tanto o mutex quanto o semáforo são iguais. Pode-se ser
implementado usando o outro, mas praticamente ambos são diferentes.
2. Um mutex não é senão um semáforo com um valor de contagem igual a um.
3. Um mutex é um semáforo com recursos adicionais, como propriedade e inversão de prioridade
proteção.
4. Um semáforo é um tipo de dados abstrato que controla o acesso a um recurso comum por
vários processos em um ambiente de programação paralelo.
5. O semáforo encontra seu uso em muitos sistemas operacionais como primitivo de sincronização.
6. Tanto o mutex quanto o semáforo são recursos do kernel usados para fins de
sincronização.