Comparação entre semáforo e mutex.
Mutex
Os conceitos sobre o mutex são muito parecidos com lock. Quando você quer entrar em uma sala , você deve adquirir o cadeado e então ter a permissão para entrar. Na informática , o mutex é usado para proteger a secção crítica impedindo que outros tópicos tenham acesso mútuo ao mesmo código para evitar a condição de raça.
Thread A Thread Bacquire mutex acquire mutex ... it will block
do something critical do something critical
release mutex release lock
É uma chave para um WC. Uma pessoa pode ter a chave – ocupar a casa de banho – no momento. Quando terminar, a pessoa dá (liberta) a chave para a próxima pessoa na fila.
Oficialmente: “Mutexes são normalmente usados para serializar o acesso a uma seção de código reentrante que não pode ser executada simultaneamente por mais de uma thread. Um objeto mutex permite apenas uma thread em uma seção controlada, forçando outras threads que tentam ganhar acesso a essa seção a esperar até que a primeira thread tenha saído dessa seção”
Ref: Symbian Developer Library
Semaphore
Não como mutex ou são adquiridos ou esperam para serem adquiridos. Semaphore pode definir o valor inicial para N>1. Podemos usar o valor para restringir quantos usuários neste processo terão permissão para acessar a seção crítica.
A principal diferença entre semáforo e mutex é que o mutex só pode ser liberado pelo usuário que o possui. Mas no mecanismo do semáforo qualquer usuário pode sinalizar para qualquer semáforo específico no kernel. Isto pode assegurar a concordância da thread.
Below é o conceito de semáforo , Quando a thread A está OK então sinalize a thread B então a thread B começa a fazer algo.
Este mecanismo assegura a concordância no processo.
Task A Task B
... Take BinSemaphore <== wait for something
Do Something Noteworthy
Give BinSemaphore do something <== unblocks
É o número de chaves de vaso sanitário idênticas e livres. Exemplo, digamos que temos quatro sanitários com fechaduras e chaves idênticas. A contagem do semáforo – a contagem de chaves – é definida para 4 no início (todos os quatro sanitários são livres), depois o valor da contagem é decrescido à medida que as pessoas vão entrando. Se todos os banheiros estiverem cheios, ou seja, não há mais chaves livres, a contagem do semáforo é 0. Agora, quando uma pessoa sai do banheiro, o semáforo é aumentado para 1 (uma chave livre), e dado à próxima pessoa na fila.
Oficialmente: “Um semáforo restringe o número de usuários simultâneos de um recurso compartilhado até um número máximo. Threads podem solicitar acesso ao recurso (diminuindo o semáforo), e podem sinalizar que terminaram de usar o recurso (incrementando o semáforo)”
Ref: Symbian Developer Library
Riscos
Usar o mutex pode encontrar Inversão Prioritária. Você precisará projetar cuidadosamente o cenário com base no mutex.