Imagine uma casa de banho onde apenas pode estar uma pessoa de cada vez. Na porta,
existe um pequeno círculo indicador de presença ou não de alguém no seu interior.
Quando uma pessoa chega, certifica-se se pode entrar. Em caso afirmativo, entra e
passa o círculo a vermelho. Se não puder entrar, espera pela sua vez na fila que
pode, ou não, existir.
pessoa chegaO que se passa neste caso é que podemos ter mais do que uma pessoa a tentar aceder, no mesmo instante, ao mesmo espaço.
enquanto não entrar se marcador=verde e não há ninguém à frente entra marcador=vermelho ... sai marcador=verde senão espera
Tente agora imaginar o caso de uma ponte muito estreita por onde tentam passar veículos em ambos os sentidos. É necessário que, antes de entrar na ponte, os condutores se certifiquem de que não há ninguém a atravessá-la nesse momento. Só nessa altura a poderão atravessar em segurança.
veículo chega à ponte enquanto não atravessar a ponte se não há nenhum veículo a atravessar a ponte em sentido contrário atravessa senão espera
Muitos estudos já foram feitos nesta área e, como não podia deixar de ser, foram
criados cenários típicos para o estudo destes problemas. Um desses exemplos é o
caso dos
Leitores/Escritores.
Tente agora aperfeiçoar o cenário anterior...
Não há qualquer problema se mais do que um veículo circular na ponte desde que
todos o façam no mesmo sentido. Assim, desde que o primeiro se certifique que não
vem ninguém em sentido contrário, todos os outros que seguem atrás de si, podem
avançar, bastando para isso, assegurarem-se de que há pelo menos um veículo na
ponte a circular no seu sentido.
veículo chega à ponte enquanto não atravessar a ponte se há algum veículo na ponte seguindo o seu sentido ou se não há nenhum veículo a atravessar a ponte em sentido contrário atravessa senão esperaComplicando um pouco mais... Imagine que a ponte se encontra à saída de uma cidade, e que quem sai tem prioridade. Neste caso, já não chega verificar os pontos mencionados acima, mas há que também verificar se há alguém com mais prioridade que nós, que, não estando na ponte, o queira fazer.
veículo com prioridade chega à ponte enquanto não atravessar a ponte se há algum veículo na ponte seguindo o seu sentido ou se não há nenhum veículo a atravessar a ponte em sentido contrário atravessa senão espera veículo sem prioridade chega à ponte enquanto não atravessar a ponte se não há nenhum veículo a atravessar a ponte em sentido contrário ou se não há nenhum veículo do outro lado para atravessar ou se há algum veículo na ponte seguindo o seu sentido atravessa senão esperaPara que isto se possa fazer em termos programação concorrente, os sistemas operativos oferecem a possibilidade de, recorrendo a Semáforos, bloquear a execução dos processos até que seja verificada a condição necessária para que estes possam prosseguir.
Um semáforo não passa de uma variável partilhada e que pode assumir valores inteiros. O valor que o semáforo assume indica o número de processos que, nesse momento, se encontram dentro da secção crítica.
Assim, o valor máximo que um semáforo pode alcançar é o número máximo de processos que se podem admitir a essa zona restrita do programa. Para um semáforo de exclusão mútua, por exemplo, o máximo valor admitido é 1, sendo que 0 indica a ausência de processos no interior da zona de acesso exclusiva, e um valor negativo denuncia o número de processos que aguardam vez para entrar.
Atenção!
O uso de Semáforos, se não for feito com bastante cuidado pode conduzir a
deadlock
.