Quantidade de sinal:
Papel: usado no sistema operacional para gerenciamento de recursos e sincronização de tarefas
Classificação: semáforo binário, semáforo de exclusão mútua, semáforo de contagem, semáforo de exclusão mútua recursiva
Semáforo binário:
Ocasiões de uso: Semelhante a um semáforo mutex, mas sem herança de prioridade, é adequado para sincronização (incluindo sincronização de tarefa para tarefa, tarefa para interromper)
Essência : Uma fila com apenas um item de fila tem apenas dois estados.
Mecanismo operacional : 1 tarefa solicita um semáforo, o semáforo é inválido e a tarefa 1 entra no estado de bloqueio
2 interrupção ou tarefa 2 libera o semáforo, o semáforo é válido
3 A tarefa 1 obtém o semáforo com sucesso, a tarefa 1 é liberada do estado de bloqueio e executa o processamento relacionado
4 Como a função da tarefa geralmente é um loop grande, execute a etapa 1 novamente, a tarefa 1 está em um estado bloqueado, aguardando uma interrupção ou a tarefa 2
Semáforo binário causará inversão de prioridade, a solução é usar semáforo mutex
Semáforo de contagem:
Comparado com o semáforo binário, o comprimento do semáforo binário é 1, e o comprimento do semáforo de contagem é maior que 1
Use ocasião: contagem de eventos, nesta ocasião, seu valor de inicialização é 0
Gerenciamento de recursos, neste caso, seu valor de inicialização é o número de recursos
Semáforo mutex:
Essência: um semáforo binário com herança de prioridade
Ocasiões de uso: só pode ser usado para exclusão mútua entre tarefas, não para funções de serviço de interrupção
Semáforo mutex recursivo:
Um semáforo mutex especial. Geralmente, a tarefa que adquiriu o semáforo mutex não pode adquirir o semáforo mutex novamente, mas o semáforo mutex recursivo é diferente. A tarefa que adquiriu o semáforo mutex recursivo pode adquirir o semáforo mutex novamente. Semáforo mutex recursivo, e o número de vezes não é limitado. Se uma tarefa adquire com sucesso o semáforo recursivo 5 vezes, então esta tarefa também deve liberar o semáforo recursivo 5 vezes. Existe um mecanismo de herança de prioridade, portanto o semáforo recursivo deve ser liberado após o uso. (Devido à existência de herança de prioridade) só pode ser usado em tarefas, não em rotinas de serviço de interrupção.