Junior — Middle
Já utilizou o mecanismo de semáforo nos seus projetos para gerir a concorrência de recursos?
sobes.tech IA
Resposta da IA
Sim, o mecanismo de semáforo é frequentemente utilizado para gerir o acesso a recursos limitados em aplicações multithread. No iOS, por exemplo, pode-se usar DispatchSemaphore para limitar o número de tarefas que podem ser executadas simultaneamente.
Exemplo de uso de DispatchSemaphore:
let semaphore = DispatchSemaphore(value: 2) // permite 2 tarefas ao mesmo tempo
DispatchQueue.global().async {
semaphore.wait() // decrementa o contador, espera se for 0
// secção crítica
print("Tarefa iniciada")
sleep(2) // simulação de trabalho
print("Tarefa terminada")
semaphore.signal() // incrementa o contador
}
Esta abordagem ajuda a evitar condições de corrida e a controlar a concorrência ao trabalhar com recursos limitados, por exemplo, ao aceder a uma base de dados ou fazer pedidos de rede.