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(ouacquire), 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(ourelease), 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.