Mutex vs Semaphore: Qual é a diferença?

Índice:

Anonim

O que é semáforo?

O semáforo é simplesmente uma variável não negativa e compartilhada entre threads. Um semáforo é um mecanismo de sinalização, e um encadeamento que está aguardando um semáforo pode ser sinalizado por outro encadeamento. Ele usa duas operações atômicas, 1) espera e 2) sinal para a sincronização do processo.

Um semáforo permite ou proíbe o acesso ao recurso, o que depende de como ele está configurado.

Neste tutorial, você aprenderá:

  • O que é Mutex?
  • Uso de Semaphore
  • Uso de Mutex
  • Diferença entre Semaphore vs. Mutex
  • Equívocos comuns sobre Mutex e Semaphore
  • Vantagens do Semaphore
  • Vantagens do Mutex
  • Desvantagem de Semáforos
  • Desvantagens do Mutex

O que é Mutex?

A forma completa de Mutex é Mutual Exclusion Object. É um tipo especial de semáforo binário usado para controlar o acesso ao recurso compartilhado. Inclui um mecanismo de herança de prioridade para evitar problemas estendidos de inversão de prioridade. Ele permite que as tarefas atuais de alta prioridade sejam mantidas no estado bloqueado pelo menor tempo possível. No entanto, a herança de prioridade não corrige a inversão de prioridade, mas apenas minimiza seu efeito.

DIFERENÇA CHAVE

  • Mutex é um mecanismo de bloqueio, enquanto o Semaphore é um mecanismo de sinalização
  • Mutex é apenas um objeto enquanto Semaphore é um inteiro
  • Mutex não tem subtipo, enquanto Semaphore tem dois tipos, que são semáforo de contagem e semáforo binário.
  • O Semaphore suporta a modificação das operações de espera e sinal, enquanto o Mutex é modificado apenas pelo processo que pode solicitar ou liberar um recurso.
  • O valor do semáforo é modificado usando as operações wait () e signal (), por outro lado, as operações Mutex são bloqueadas ou desbloqueadas.

Uso de Semaphore

No caso de um único buffer, podemos separar o buffer de 4 KB em quatro buffers de 1 KB. O semáforo pode ser associado a esses quatro buffers. Isso permite que usuários e produtores trabalhem em buffers diferentes ao mesmo tempo.

Uso de Mutex

Um mutex fornece exclusão mútua, que pode ser o produtor ou o consumidor que pode ter a chave (mutex) e prosseguir com seu trabalho. Enquanto o produtor preencher o buffer, o usuário precisará esperar e vice-versa. No bloqueio Mutex, o tempo todo, apenas uma única thread pode funcionar com o buffer inteiro.

Diferença entre Semaphore vs. Mutex

Parâmetros Semáforo Mutex
Mecanismo É um tipo de mecanismo de sinalização. É um mecanismo de bloqueio.
Tipo de dados O semáforo é uma variável inteira. Mutex é apenas um objeto.
Modificação As operações de espera e sinal podem modificar um semáforo. Ele é modificado apenas pelo processo que pode solicitar ou liberar um recurso.
Gestão de recursos Se nenhum recurso estiver livre, o processo requer um recurso que deve executar a operação de espera. Deve esperar até que a contagem do semáforo seja maior que 0. Se estiver bloqueado, o processo terá que esperar. O processo deve ser mantido em uma fila. Isso precisa ser acessado apenas quando o mutex está desbloqueado.
Fio Você pode ter vários threads de programa. Você pode ter vários threads de programa em mutex, mas não simultaneamente.
Propriedade O valor pode ser alterado por qualquer processo de liberação ou obtenção do recurso. O bloqueio do objeto é liberado apenas pelo processo, que obteve o bloqueio nele.
Tipos Tipos de semáforo são semáforo de contagem e semáforo binário. Mutex não tem subtipos.
Operação O valor do semáforo é modificado usando a operação wait () e signal (). O objeto Mutex está bloqueado ou desbloqueado.
Ocupação de Recursos Ele é ocupado se todos os recursos estão sendo usados ​​e o processo que solicita o recurso executa a operação wait () e se bloqueia até que a contagem do semáforo se torne> 1. Caso o objeto já esteja bloqueado, o processo solicitante de recursos aguarda e é enfileirado pelo sistema antes que o bloqueio seja liberado.

Fatos comuns sobre Mutex e Semaphore

Aqui estão alguns fatos comuns sobre Mutex e Semaphore:

  • Apenas uma tarefa pode adquirir o mutex. Portanto, há propriedade associada a um mutex e apenas o proprietário pode liberar o mutex.
  • As razões para usar mutex e semáforo são diferentes, talvez devido à similaridade em sua implementação, um mutex seria referido como semáforo binário.
  • Um equívoco bastante conhecido é que Mutexes e Semaphores são quase iguais, com a única diferença sendo que um Mutex é capaz de contar até 1, enquanto os semáforos podem contar de 0 a N.
  • Sempre há incerteza entre semáforo binário e mutex. Você pode ouvir que um mutex é um semáforo binário, o que não é correto.

Vantagens do Semaphore

Aqui, estão os prós / benefícios de usar o Semaphore:

  • Permite que mais de um thread acesse a seção crítica
  • Os semáforos são independentes da máquina.
  • Os semáforos são implementados no código independente da máquina do microkernel.
  • Eles não permitem que vários processos entrem na seção crítica.
  • Como há muito tempo esperando no semáforo, nunca há desperdício de tempo e recursos do processo.
  • Eles são independentes da máquina, que devem ser executados no código independente da máquina do microkernel.
  • Eles permitem um gerenciamento flexível de recursos.

Vantagens do Mutex

Aqui, estão importantes prós / benefícios do Mutex

  • Mutexes são apenas bloqueios simples obtidos antes de entrar em sua seção crítica e, em seguida, liberá-lo.
  • Como apenas um thread está em sua seção crítica em um determinado momento, não há condições de corrida e os dados sempre permanecem consistentes.

Desvantagem de Semáforos

Aqui, estão os contras / desvantagem do semáforo

  • Uma das maiores limitações de um semáforo é a inversão de prioridade.
  • O sistema operacional deve acompanhar todas as chamadas a aguardar e sinalizar o semáforo.
  • Seu uso nunca é imposto, mas é apenas por convenção.
  • Para evitar deadlocks no semáforo, as operações Wait e Signal precisam ser executadas na ordem correta.
  • A programação de semáforo é um método complexo, portanto, há chances de não se atingir a exclusão mútua.
  • Também não é um método prático para uso em larga escala, pois seu uso leva à perda de modularidade.
  • O semáforo é mais sujeito a erros do programador.
  • Isso pode causar impasse ou violação de exclusão mútua devido a erro do programador.

Desvantagens do Mutex

Aqui estão os contras / desvantagem do Mutex

  • Se um encadeamento obtiver um bloqueio e entrar em suspensão ou for interrompido, o outro encadeamento pode não conseguir avançar. Isso pode levar à fome.
  • Não pode ser bloqueado ou desbloqueado a partir de um contexto diferente daquele que o adquiriu.
  • Apenas um segmento deve ser permitido na seção crítica por vez.
  • A implementação normal pode levar a um estado de espera ocupado, o que desperdiça tempo de CPU.