Sobes.tech
Middle — Middle+

Como pode evitar condições de corrida num ambiente multithread?

sobes.tech IA

Resposta da IA

Para evitar condições de corrida em ambientes multithread no iOS, utilizam-se mecanismos de sincronização que garantem o acesso sequencial aos recursos partilhados:

  • Semáforos e mutexes (por exemplo, DispatchSemaphore, NSLock) — bloqueiam o acesso à secção crítica do código até que outro thread libere o recurso.
  • Filas de despacho serializadas — filas GCD que garantem a execução de tarefas em ordem.
  • Operações atómicas — operações que são executadas na sua totalidade sem interrupções.
  • Uso de @synchronized — açúcar sintático para bloquear objetos.

Exemplo usando DispatchQueue:

let serialQueue = DispatchQueue(label: "com.example.serialQueue")
var sharedResource = 0

serialQueue.async {
    sharedResource += 1
}

serialQueue.async {
    sharedResource += 1
}

Aqui, as alterações em sharedResource ocorrem de forma sequencial, o que evita condições de corrida.