Pesquisa para entregar hj programa o concorrente
Um semáforo é uma variável inteira não negativa que pode ser manipulada por duas instruções P (Down) e V (Up).
As modificações feitas no valor do semáforo usando Down e Up são atômicas
No caso da exclusão mútua as instruções Down e Up funcionam como protocolos de entrada e saída das regiões críticas.
Down é executada quando o processo deseja entrar na região crítica. Decrementa o semáforo de 1;
Up é executada quando o processo sai da sua região crítica. Incrementa o semáforo de 1 Crítica . Incrementa o semáforo de 1.
Um semáforo fica associado a um recurso compartilhado, indicando se ele está sendo usado.
Se o valor do semáforo é maior do que zero, então existe recurso compartilhado disponível.
Se o valor do semáforo é zero, então o recurso está sendo usado
Down(S) if (S == 0) bloqueia processo else S = S - 1;
Up(S)
if (tem processo na fila) libera processo else S = S + 1;
Para exclusão mútua é usado um semáforo binário
P
Down (mutex);
Região Crítica;
Up (mutex);
Semáforos também são usados para implementar a sincronização entre os processos.
O uso de semáforos exige muito cuidado do programador.
Os comandos down e up podem estar espalhados em um programa sendo difícil visualizar o efeito destas operações.
Um semáforo é um objeto do núcleo.
Para cada semáforo s existem duas operações (P/V , Down/Up ou wait/signal):
• Down(&s) :: verifica se pode entrar na Região crítica, e se não puder, bloqueia;
• Up(&s) :: avisa que