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.