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ção | Semáforo | Mutex |
---|---|---|
Basic | O semáforo é um mecanismo de sinalização. | Mutex é um mecanismo de bloqueio. |
Existência | Semaphore é uma variável inteira. | Mutex é um objeto. |
Função | O 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. |
Propriedade | O 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. |
Categorizar | Semaphore pode ser categorizado em contagem de semáforo e semáforo binário. | Mutex não é categorizado ainda mais. |
Operação | O 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 Ocupados | Se 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
- 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.
- Semaphore é tipicamente uma variável inteira enquanto que mutex é um objeto .
- 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.
- 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.
- Semaphore são de dois tipos, semáforo binário e semáforo binário que é bastante semelhante ao mutex.
- 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.
- 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.