Muito bom comentário, acporto.
Para solidificar a ideia:
- "Uma propriedade essencial de instruções de semáforo é que, tão logo um processo tenha iniciado uma instrução em um semáforo, nenhum outro processo pode acessá-lo até que o primeiro tenha concluído sua instrução ou tenha sido suspenso quando tentava executar uma instrução down em um 0." Fonte: Organização estruturada de computadores 6ed - pg. 377 - A. Tanenbaum;
- "A operação down sobre um semáforo verifica se seu valor é maior que 0. Se for, decrementará o valor e prosseguirá. Se o valor for 0, o processo será posto para dormir, sem terminar o down, pelo menos por enquanto. Verificar o valor, alterá-lo e possivelmente ir dormir são tarefas executadas todas como uma única ação atômica e indivisível. Garante-se que, uma vez iniciada uma operação de semáforo, nenhum outro processo pode ter acesso ao semáforo até que a operação tenha terminado ou sido bloqueada." Fonte: Sistemas Operacionais Modernos 3ed - pg. 77 - A. Tanenbaum
Gabarito Certo
O semáforo é uma variavél que guarda o número de wakeup's feitos. Caso ele seja zero nenhum wakeup foi deito e se ele é um número positivo, temos esse número de wakeup's feitos.
Todo semáforo tem de ser atômico. Isso garante que quando começa uma operação em um semáforo nenhum outro processo acessa esse semáforo até que a operação seja completada.
Se estamos tratando de múltiplas CPU's, cada semáforo deve estar protegido por uma variável lock.
"Retroceder Nunca Render-se Jamais !"
Força e Fé !
Fortuna Audaces Sequitur !