Sobes.tech
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.