Durante a execução de vários processos simultaneamente, pode acontecer que a ordem de execução das instruções na seção crítica afete o estado final dos valores na seção crítica . Isso nada mais é do que uma condição de corrida e dá origem a inconsistências no código. Eles são removidos com a ajuda da exclusão mútua , mas ainda pode haver uma chance de inanição de outros processos por causa disso. Quando essa fome se estende ao infinito, isso leva a um impasse.

Portanto, a exclusão mútua por si só não pode garantir a execução simultânea de processos sem problemas - uma segunda condição conhecida como progresso é necessária para garantir que nenhum deadlock ocorra durante essa execução.

Uma definição formal de progresso é declarada por Galvin como:

“Se nenhum processo está sendo executado em sua seção crítica e alguns processos desejam entrar em suas seções críticas, então apenas aqueles processos que não estão executando em sua seção restante podem participar na decisão de qual entrará em sua seção crítica em seguida, e esta seleção não pode ser adiada indefinidamente. ”

É muita coisa para entender de uma vez, então vamos usar um exemplo para ver o quão válida é nossa declaração. Suponha que na seção de roupas de uma loja de departamentos, um menino A e uma menina B queiram usar o vestiário.

O menino A decide usar primeiro o vestiário, mas não consegue decidir quantas roupas levar consigo. Como resultado, embora o vestiário esteja vazio, a menina B (que decidiu quantas roupas deve experimentar) não pode entrar no vestiário porque está obstruída pelo menino A.

Em outras palavras, o menino A impede a menina B de usar o vestiário, embora ele não precise usá-lo. Isso é o que o conceito de progresso foi feito para prevenir.

De acordo com a definição principal de progresso, os únicos processos que podem participar da tomada de decisão sobre quem pode entrar na seção crítica são aqueles que estão prestes a entrar na seção crítica ou estão executando algum código antes de entrar na seção crítica. Os processos que estão em sua seção de lembrete, que é a seção que sucede a seção crítica, não têm permissão para participar neste processo de tomada de decisão.

A principal tarefa do progresso é garantir que um processo esteja sendo executado na seção crítica a qualquer momento (de forma que algum trabalho esteja sempre sendo feito pelo processador). Esta decisão não pode ser “adiada indefinidamente” - em outras palavras, deve levar um tempo limitado para selecionar qual processo deve ter permissão para entrar na seção crítica. Se essa decisão não puder ser tomada em um tempo finito, isso levará a um impasse.

Aprenda todos os conceitos do GATE CS com aulas gratuitas ao vivo em nosso canal do youtube.