Junior — Middle
Podes explicar o que é um semáforo no contexto de programação e sincronização de threads?
sobes.tech IA
Resposta da IA
Um semáforo é um mecanismo de sincronização utilizado para controlar o acesso de múltiplos threads a um recurso compartilhado.
Ele contém um contador que indica quantos threads podem aceder ao recurso simultaneamente. Quando um thread quer entrar na secção crítica, tenta "capturar" o semáforo:
- Se o contador for maior que zero, é decrementado em um, e o thread continua.
- Se o contador for zero, o thread fica bloqueado e espera que outro libere o semáforo.
Quando um thread termina de usar o recurso, liberta o semáforo incrementando o contador, permitindo que outros threads continuem.
Exemplo de uso de semáforo em Swift (iOS):
let semaphore = DispatchSemaphore(value: 2) // permitimos 2 threads ao mesmo tempo
DispatchQueue.global().async {
semaphore.wait() // tenta capturar o semáforo
print("Thread começou a trabalhar")
sleep(2) // simulação de trabalho
print("Thread terminou de trabalhar")
semaphore.signal() // liberta o semáforo
}
Assim, o semáforo ajuda a controlar o número de threads a trabalhar simultaneamente com um recurso partilhado, prevenindo condições de corrida e garantindo a correção do funcionamento.