Sistemas Operacionais
Seções críticas são usadas para a atualização de diversas variáveis que tenham alguma relação sem que a outra linha faça alguma modificação na integridade dos dados.
A seção crítica é a parte do código que acessa uma estrutura compartilhada de dados. Seu problema refere-se à execução de processos, aonde outros processos entram na sua seção. Portanto a seção crítica deve utilizar de mecanismos de sincronização de linhas na execução dos programas pra proteger a validade do estado compartilhado.
Esse problema ocorre quando processos concorrentes compartilham variáveis e a integridade da variável passa a ser violada pelo outro. Assim a solução está em garantir que quando um processo é executado, um segmento de código, nenhum outro possa fazer o mesmo.
A resolução para este problema deve assegurar exclusividade mútua entre os processos quanto à seção crítica, não depender nem da velocidade de execução do processo e nem da quantidade de processadores. Deve fazer também com que um processo nunca seja impedido de entrar na seção crítica quando a mesma estiver disponível e que este nunca fique interrompido indefinidamente.
Mutex:
Mutex é uma forma de controle para que não ocorram problemas na seção crítica. Ele deve assegurar com que processos concorrentes não executem momentaneamente a seção.
Para isso existe uma variável que suporta dois valores: livre e ocupado. E sobre este processo pode ser executadas a ação para solicitar (lock) e outra que permite a requisição de saída da seção crítica (unlock).
Porém sua implementação não é tão simples, já que para funcionar perfeitamente, dois processos não poderiam chamar a função de lock ao mesmo tempo. No caso de monoprocessador a solução mais utilizada é desabilitar as interrupções. Em casos de multiprocessador é preciso usar o spin-lock, que não passa de uma forma de proteção associado a uma estrutura de dados, pois este impede a execução da operação lock e unlock sobre o mesmo