Junior — Middle
Pode explicar o conceito de corrida de condições num ambiente multithread e como isso pode afetar o funcionamento de um programa?
sobes.tech IA
Resposta da IA
A condição de corrida (race condition) ocorre quando vários threads acedem e modificam dados partilhados simultaneamente sem a devida sincronização. Como resultado, o estado final dos dados pode ser imprevisível e depender da ordem de execução dos threads.
Por exemplo, se dois threads incrementarem um contador ao mesmo tempo, sem bloqueios, o valor final pode ser menor do que o esperado, pois as operações de leitura e escrita podem sobrepor-se.
No iOS, condições de corrida podem levar a falhas, exibição incorreta da UI ou corrupção de dados. Para evitá-las, usam-se mecanismos de sincronização:
- Filas GCD com atributo serial
- NSLock, @synchronized
- Propriedades atómicas
Exemplo com GCD:
let serialQueue = DispatchQueue(label: "com.example.serial")
var counter = 0
serialQueue.sync {
counter += 1
}
Garante que as alterações em counter ocorram de forma sequencial.