Junior — Middle
Jak zajistit bezpečnost přístupu k poli v prostředí s více vlákny?
sobes.tech AI
Odpověď od AI
Pro zajištění bezpečného přístupu k poli v prostředí s více vlákny v iOS (Swift) se obvykle používají mechanismy synchronizace, aby se zabránilo závodním podmínkám a poškození dat.
Hlavní přístupy:
- Serializace přístupu pomocí 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]
}
}
- Použití NSLock nebo jiných primitiv blokování
let lock = NSLock()
var array: [Int] = []
func appendElement(_ element: Int) {
lock.lock()
array.append(element)
lock.unlock()
}
- Použití konkurenční fronty s bariérami (Dispatch barriers) pro čtení/zápis
To umožňuje paralelní čtení, ale zápis blokuje frontu.
Klíčem je řídit přístup k poli pomocí synchronizace, aby se zabránilo současným změnám z různých vláken.