Diferença Entre Semaphore e Monitor
Semáforo vs Monitor
O Semaphore é uma estrutura de dados que é usada para garantir que vários processos não acessem um comum recurso ou uma seção crítica ao mesmo tempo, em ambientes de programação paralela. Os semaforos são usados para evitar fechaduras mortas e condições de corrida. Monitor é uma construção de linguagem de programação que também é usada para evitar múltiplos processos que acessam um recurso comum ao mesmo tempo, portanto, garante exclusão mútua. Os monitores usam variáveis condicionais para atingir essa tarefa.
O que é um Semaphore?
Semaphore é uma estrutura de dados que é usada para fornecer exclusão mútua a seções críticas. Os semaforos suportam principalmente duas operações chamadas de espera (historicamente conhecida como P) e sinal (historicamente conhecido como V). A operação de espera bloqueia um processo até o semáforo estar aberto e a operação do sinal permite que outro processo (thread) entre. Cada semáforo está associado a uma fila de processos de espera. Quando a operação de espera é chamada por um segmento, se o semáforo estiver aberto, o segmento pode continuar. Se o semáforo estiver fechado quando a operação de espera é chamada por um segmento, o segmento está bloqueado e tem que esperar na fila. A operação de sinal abre um semáforo e, se houver um segmento já aguardando na fila, esse processo pode continuar e se não houver threads na fila, o sinal será lembrado para os próximos tópicos. Existem dois tipos de semáforos chamados de semáforos mutex e contando semáforos. Os semáforos Mutex permitem um único acesso a um recurso e a contagem de semáforos permite vários segmentos para acessar um recurso (que possui várias unidades disponíveis).
O que é um Monitor?
Um monitor é uma construção de linguagem de programação que é usada para controlar o acesso a dados compartilhados. Os monitores encapsulam estruturas de dados compartilhados, procedimentos (que operam em estruturas de dados compartilhadas) e sincronização entre invocações de procedimento simultâneo. Um monitor garante que seus dados não são confrontados com acessos não estruturados e garante que os passos (que acessam os dados do monitor através de seus procedimentos) interagem de forma legítima. Um monitor garante exclusão mútua, permitindo que apenas um segmento executa qualquer procedimento de monitor em um determinado momento. Se outro thread tenta invocar um método no monitor, enquanto um thread já está executando um procedimento no monitor, o segundo procedimento é bloqueado e tem que esperar na fila. Existem dois tipos de monitores chamados monitores Hoare e monitores Mesa. Eles diferem principalmente em sua semântica de programação.
Qual a diferença entre Semaphore e Monitor?
Embora os semaforos e os monitores sejam utilizados para alcançar a exclusão mútua em ambientes de programação paralelos, eles diferem nas técnicas utilizadas para atingir essa tarefa.Nos monitores, o código usado para alcançar a exclusão mútua é em um único lugar e é mais estruturado, enquanto o código para semáforos é distribuído como chamadas de função de espera e sinal. Além disso, é muito fácil cometer erros ao implementar semáforos, embora haja poucas chances de cometer erros na implementação de monitores. Além disso, os monitores usam variáveis de condição, enquanto os semaforos não.