Junior — Middle
Pode explicar o princípio de funcionamento do semáforo na programação multithread?
sobes.tech IA
Resposta da IA
Um semáforo é um mecanismo de sincronização na programação multithread que controla o acesso a um recurso compartilhado. Ele contém um contador que indica quantos threads podem aceder ao recurso simultaneamente.
Princípio de funcionamento:
- Inicialmente, o contador do semáforo é definido para um número igual ao número de recursos disponíveis.
- Quando um thread quer aceder, chama a operação "wait" (ou "acquire"), que diminui o contador em 1.
- Se o contador ficar menor que zero, o thread fica bloqueado e espera até que outro thread libere o recurso.
- Quando um thread liberta o recurso, chama a operação "signal" (ou "release"), que aumenta o contador em 1 e desbloqueia os threads em espera.
Exemplo em Swift usando DispatchSemaphore:
let semaphore = DispatchSemaphore(value: 2) // permitimos 2 threads ao mesmo tempo
DispatchQueue.global().async {
semaphore.wait() // tenta aceder
print("Thread começou a trabalhar")
sleep(2) // simulação de trabalho
print("Thread terminou de trabalhar")
semaphore.signal() // liberta o recurso
}
Desta forma, o semáforo ajuda a limitar o número de threads que trabalham simultaneamente com um recurso compartilhado, prevenindo condições de corrida e garantindo a integridade dos dados.