Exclusão Mutua
Técnicamente exclusão mútua ( também conhecida pelo acrônimo mutex para mutual exclusion, o termo em inglês) é uma técnica usada em programação concorrente para evitar que dois processos ou threads tenham acesso simultaneamente a um recurso compartilhado, acesso esse denominado por seção crítica. Um meio simples para exclusão mútua é a utilização de um semáforo binário, isto é, que só pode assumir dois valores distintos, 0 e 1. O travamento por semáforo deve ser feito antes de utilizar o recurso, e após o uso o recurso deve ser liberado. Enquanto o recurso estiver em uso, qualquer outro processo que o utilize deve esperar a liberação.Porém, essa técnica pode causar vários efeitos colaterais, como deadlocks, em que dois processos obtêm o mesmo semáforo e ficam esperando indefinidamente um outro processo liberar o semáforo; e inanição, que é quando o processo nunca dispõe de recursos suficientes para executar plenamente. Em sistemas distribuídos existem alternativas para se obter exclusões mútuas, que também apresentam garantias de justiça, ausência de deadlock e ausência de livelock (situação na qual uma unidade concorrente não consegue terminar a execução ou entrar em uma seção crítica por excesso de trabalho ou falta de velocidade; difere de deadlock por estar ativa e não bloqueada ou aguardando algo). Exemplos incluem o algoritmo centralizado e o algoritmo em anel.
Problemas de exclusão mútua - um problema típico que normalmente é preciso resolver em sistemas concorrentes é o controle de acesso a um recurso que não pode ser partilhado. Considere, por exemplo, o caso de uma impressora partilhada por várias pessoas: se não se garantir que apenas um documento é impresso de cada vez podem saír páginas de vários documentos intercaladas. No geral, podemos dividir as operações a realizar pelos vários processos em críticas, quando tem que ser executadas em exclusividade, e não críticas, quando podem ser executadas concorrentemente com outras