Junior — Middle
Cum asigurați securitatea accesului la un array într-un mediu multi-thread?
sobes.tech AI
Răspuns de la AI
Pentru a asigura siguranța accesului la un array într-un mediu multi-thread în iOS (Swift), se utilizează de obicei mecanisme de sincronizare pentru a evita condițiile de cursă și corupția datelor.
Abordări principale:
- Serializarea accesului prin DispatchQueue
let queue = DispatchQueue(label: "com.example.arrayQueue")
var array: [Int] = []
func appendElement(_ element: Int) {
queue.sync {
array.append(element)
}
}
func getElement(at index: Int) -> Int? {
return queue.sync {
guard array.indices.contains(index) else { return nil }
return array[index]
}
}
- Utilizarea NSLock sau a altor primitive de blocare
let lock = NSLock()
var array: [Int] = []
func appendElement(_ element: Int) {
lock.lock()
array.append(element)
lock.unlock()
}
- Utilizarea unei cozi concurente cu bariere (Dispatch barriers) pentru citire/scriere
Aceasta permite citirea în paralel, dar scrierea blochează coada.
Prin urmare, cheia este controlul accesului la array prin sincronizare pentru a evita modificările simultane din diferiți fire de execuție.