Recomendado, 2024

Escolha Do Editor

Diferença entre o semáforo e o mutex

A sincronização de processos desempenha um papel importante na manutenção da consistência dos dados compartilhados. As soluções de software e hardware estão presentes para lidar com problemas de seção crítica. Mas soluções de hardware para problemas de seção crítica são muito difíceis de implementar. No artigo de hoje, discutiremos duas soluções baseadas em software para lidar com problemas críticos de seção, como Semaphore e Mutex.

A diferença básica entre semáforo e mutex é que semáforo é um mecanismo de sinalização ou seja, processos executam operação wait () e signal () para indicar se estão adquirindo ou liberando o recurso, enquanto Mutex é mecanismo de bloqueio, o processo tem que adquirir o bloqueio objeto mutex se quiser adquirir o recurso. Existem mais algumas diferenças entre semáforo e mutex, vamos discuti-las com a ajuda do gráfico de comparação mostrado abaixo.

Gráfico de comparação

Base para ComparaçãoSemáforoMutex
BasicO semáforo é um mecanismo de sinalização.Mutex é um mecanismo de bloqueio.
ExistênciaSemaphore é uma variável inteira.Mutex é um objeto.
FunçãoO semáforo permite que vários encadeamentos de programa acessem uma instância finita de recursos.O mutex permite que vários encadeamentos de programa acessem um único recurso, mas não simultaneamente.
PropriedadeO valor do semáforo pode ser alterado por qualquer processo de aquisição ou liberação do recurso.O bloqueio de objeto mutex é liberado apenas pelo processo que adquiriu o bloqueio nele.
CategorizarSemaphore pode ser categorizado em contagem de semáforo e semáforo binário.Mutex não é categorizado ainda mais.
OperaçãoO valor do semáforo é modificado usando a operação wait () e signal ().O objeto Mutex é bloqueado ou desbloqueado pelo processo solicitando ou liberando o recurso.
Recursos OcupadosSe todos os recursos estiverem sendo usados, o processo que solicita o recurso executa a operação wait () e bloqueia a si próprio até que a contagem do semáforo se torne maior que um.Se um objeto mutex já estiver bloqueado, o processo que solicita recursos aguarda e é enfileirado pelo sistema até que o bloqueio seja liberado.

Definição de Semáforo

Semaphore é uma ferramenta de sincronização de processos. Semaphore é tipicamente uma variável inteira S que é inicializada para o número de recursos presentes no sistema e o valor do semáforo pode ser modificado apenas por duas funções wait () e signal () além da inicialização.

A operação wait () e signal () modifica o valor do semáforo de forma indivisível . Isso significa que quando um processo está modificando o valor do semáforo, nenhum outro processo pode modificar simultaneamente o valor do semáforo. Semaphore são distinguidos pelo sistema operacional em duas categorias Contando semáforos e semáforo binário .

Em Contando o Semáforo, o valor S do semáforo é inicializado com o número de recursos presentes no sistema. Sempre que um processo deseja acessar o recurso, ele executa a operação wait () no semáforo e decrementa o valor do semáforo em um. Quando libera o recurso, ele executa a operação signal () no semáforo e incrementa o valor do semáforo em um. Quando a contagem do semáforo vai para 0, significa que todos os recursos são ocupados pelos processos. Se um processo precisar usar um recurso quando a contagem de semáforo for 0, ele executará wait () e será bloqueado até que o valor do semáforo se torne maior que 0.

No semáforo binário, o valor do semáforo varia entre 0 e 1 . É semelhante ao bloqueio mutex, mas o mutex é um mecanismo de bloqueio, enquanto o semáforo é um mecanismo de sinalização. No semáforo binário, se um processo quiser acessar o recurso, ele executa a operação wait () no semáforo e decrementa o valor do semáforo de 1 para 0. Quando ele libera o recurso, ele executa uma operação signal () no semáforo e incrementa seu valor para 1. Se o valor do semáforo for 0 e um processo desejar acessar o recurso, ele executará a operação wait () e se bloqueará até que o processo atual utilizando os recursos libere o recurso.

Definição de Mutex

Exclusão Mútua O objeto é denominado em breve como Mutex. Do termo exclusão mútua, podemos entender que apenas um processo de cada vez pode acessar o recurso fornecido. O objeto mutex permite que os diversos encadeamentos do programa usem o mesmo recurso, mas um de cada vez, não simultaneamente.

Quando um programa é iniciado, solicita que o sistema crie um objeto mutex para um determinado recurso. O sistema cria o objeto mutex com um nome ou ID exclusivo. Sempre que o encadeamento do programa quiser usar o recurso que ocupa o bloqueio no objeto mutex, utiliza o recurso e após o uso, ele libera o bloqueio no objeto mutex. Em seguida, o próximo processo tem permissão para adquirir o bloqueio no objeto mutex.

Enquanto isso, um processo adquiriu o bloqueio no objeto mutex que nenhum outro segmento / processo pode acessar esse recurso. Se o objeto mutex já estiver bloqueado, o processo que deseja adquirir o bloqueio no objeto mutex deve aguardar e é enfileirado pelo sistema até que o objeto mutex seja desbloqueado.

Principais diferenças entre semáforo e mutex

  1. Semaphore é um mecanismo de sinalização, pois a operação wait () e signal () executada na variável semáforo indica se um processo está adquirindo o recurso ou liberando o recurso. Por outro lado, o mutex é um mecanismo de bloqueio, para adquirir um recurso, um processo precisa bloquear o objeto mutex e, ao liberar um processo de recurso, deve desbloquear o objeto mutex.
  2. Semaphore é tipicamente uma variável inteira enquanto que mutex é um objeto .
  3. Semaphore permite que vários encadeamentos de programa acessem a instância finita de recursos . Por outro lado, o Mutex permite que vários encadeamentos de programa acessem um único recurso compartilhado, mas um de cada vez.
  4. O valor da variável de semáforo pode ser modificado por qualquer processo que adquira ou libere recursos executando operações wait () e signal (). Por outro lado, o bloqueio adquirido no objeto mutex pode ser liberado apenas pelo processo que adquiriu o bloqueio no objeto mutex.
  5. Semaphore são de dois tipos, semáforo binário e semáforo binário que é bastante semelhante ao mutex.
  6. O valor da variável do semáforo é modificado pela operação wait () e signal () além da inicialização. No entanto, o objeto mudo é bloqueado ou desbloqueado pelo processo de aquisição ou liberação do recurso.
  7. Se todos os recursos forem adquiridos pelo processo e nenhum recurso estiver livre, o processo que deseja adquirir o recurso executará a operação wait () na variável semáforo e bloqueará ele mesmo até que a contagem do semáforo se torne maior que 0. Mas se um objeto mutex já estiver bloqueado então o processo que deseja adquirir esperas de recursos e ser enfileirado pelo sistema até que o recurso seja liberado e o objeto mutex seja desbloqueado.

Conclusão:

Semaphore é uma opção melhor caso haja várias instâncias de recursos disponíveis. No caso de um único recurso compartilhado, o mutex é uma escolha melhor.

Top