Sobes.tech
Junior — Middle

Poderia explicar o que é um semáforo e como ele é usado para sincronizar processos?

sobes.tech IA

Resposta da IA

O semáforo é um mecanismo de sincronização usado para gerenciar o acesso a um recurso compartilhado em um ambiente multithread ou multiprocessador. Ele contém um contador que indica quantos threads ou processos podem acessar o recurso simultaneamente.

Princípio de funcionamento:

  • Inicialmente, o contador do semáforo é definido para o número de recursos disponíveis.
  • Quando um thread deseja acessar, ele chama a operação wait (ou acquire), que diminui o contador.
  • Se o contador ficar menor que zero, o thread é bloqueado, aguardando a liberação do recurso.
  • Quando o thread libera o recurso, ele chama signal (ou release), que aumenta o contador e desbloqueia os threads em espera.

No iOS, para trabalhar com semáforos, frequentemente se usa a classe DispatchSemaphore do GCD:

let semaphore = DispatchSemaphore(value: 1) // 1 significa que o recurso está disponível para um thread

// No thread:
semaphore.wait()   // espera até o recurso estar disponível
// Trabalha com o recurso
semaphore.signal() // libera o recurso

Assim, os semáforos ajudam a evitar condições de corrida e garantem acesso correto aos recursos compartilhados.