Junior — Middle
Qual é a diferença entre o mecanismo de exclusão mútua Lock e Semaphore na gestão de acesso a recursos?
sobes.tech IA
Resposta da IA
Lock (exclusão mútua) e Semaphore (semaforo) são mecanismos de sincronização, mas diferem em funcionalidade e aplicação:
-
Lock (Mutex)
- Destinado a garantir acesso exclusivo a um recurso.
- Apenas um thread pode possuir o Lock de cada vez.
- Se o Lock estiver ocupado, outros threads aguardam sua liberação.
- Usado para proteger seções críticas.
-
Semaphore
- Possui um contador que determina quantos threads podem acessar o recurso simultaneamente.
- Pode permitir o acesso a múltiplos threads ao mesmo tempo (por exemplo, um semáforo com contador 3 permite 3 threads simultaneamente).
- Usado para gerenciar o acesso a recursos limitados.
Exemplo em C#:
// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // aquisição
// seção crítica
mutex.ReleaseMutex(); // liberação
// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // máximo de 3 acessos simultâneos
semaphore.WaitOne();
// trabalho com o recurso
semaphore.Release();
Assim, Lock é um caso particular de semáforo com um contador máximo de 1.