-
O valor de um semáforo indica quantos processos (ou threads) podem ter acesso a um recurso compartilhado. As principais operações sobre semáforos são:
- Inicialização: Recebe um valor inteiro indicando a quantidade de processos que podem acessar um determinado recurso.
- Operação wait ou P: Decrementa o valor do semáforo. Se o semáforo está com valor zero, o processo é posto para dormir.
- Operação signal ou V: Se o semáforo estiver com o valor zero e existir algum processo adormecido, um processo será acordado. Caso contrário, o valor do semáforo é incrementado.
-
Respondendo com base no que consegui pesquisar...
a) Errado. Podem assumir 0 ou 1
b) Correta. Quando é executada a instrução down/wait/P em um semáforo com valor 0 significa que outro processo já está acessando o recurso compartilhado, portanto o processo que veio depois ficará bloqueado.
c) Polêmica... depende da implementação. Um semáforo poderia ter o valor -2 indicando que há 2 processos bloqueados.
d) Errado. Se entendi bem, semáforo possui apenas 2 instruções e são atômicas.
e) Errado. Semáforos são muito usados para exclusão mútua.
-
Complementando:
Letra C está "ERRADA", pois, nesse caso, quando se utiliza uma variável inteira que pode assumir qualquer outro valor diferente de 0 ou 1 (inclusive valores negativos) não caacteriza semáforo, dá-se o nome de contador.
-
SEMÁFORO:
.: Proposto por Dijkstra;
.: Mecanismo de Sincronização;
.: Implementa a exclusão mútua e a sincronização condicional entre processos;
.: Variavel inteira, não negativa;
.: Instruções: DOWN e UP - são indivisíveis;
.: UP: incrementa uma unidade ao valor;
.: DOWN: decrementa a variável - Executada em um semáforo com valor 0 faz com que o processo entre no estado de espera;
At.te
Foco na missão ❢