Diferença entre Semaphore e Mutex
Semaphore vs Mutex
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. Mutex (Mutual Exclusion Object) também é usado para evitar o acesso a um recurso comum ao mesmo tempo por vários processos concorrentes.
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 Mutex?
Quando um aplicativo de computador é iniciado, ele criará um mutex e o anexará a um recurso. Quando o recurso é usado por um segmento, ele está bloqueado e outros tópicos não podem usá-lo. Se outro segmento quiser usar o mesmo recurso, ele terá que fazer uma solicitação. Então esse tópico será colocado em uma fila até o primeiro tópico terminar com o recurso. Quando o primeiro segmento for concluído com o recurso, o bloqueio será removido e o tópico que aguarda na fila pode acessar o recurso. Se houver vários tópicos esperando na fila, eles têm acesso em uma base rotativa. Praticamente, quando o mutex alterna o acesso a um recurso entre vários tópicos, ele será visível porque vários segmentos estão consumindo um recurso ao mesmo tempo. Mas internamente, apenas um único segmento está acessando o recurso em um determinado momento.
Qual a diferença entre Semaphore e Mutex?
No entanto, tanto os objetos semforos como os objetos mutex são usados para alcançar a exclusão mútua em ambientes de programação paralela, eles têm algumas diferenças. Um objeto mutex só permite que um único segmento consome um recurso ou uma seção crítica, enquanto os semáforos permitem um número restrito de acessos simultâneos a um recurso (sob um número máximo permitido).Com os objetos mutex, outros tópicos que desejam acessar o recurso precisam aguardar em uma fila, até que o segmento atual termine de usar o recurso.