Sobes.tech
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.