Junior — Middle
Ako zabezpečiť bezpečný prístup k poľu v prostredí s viacerými vláknami?
sobes.tech AI
Odpoveď od AI
Na zabezpečenie bezpečného prístupu k poľu v prostredí s viacerými vláknami v iOS (Swift) sa zvyčajne používajú mechanizmy synchronizácie, aby sa predišlo súťažiam a poškodeniu dát.
Hlavné prístupy:
- Serializácia prístupu pomocou 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žitie NSLock alebo iných primitívov zámku
let lock = NSLock()
var array: [Int] = []
func appendElement(_ element: Int) {
lock.lock()
array.append(element)
lock.unlock()
}
- Použitie konkurenčného radu s bariérami (Dispatch barriers) na čítanie/zápis
Toto umožňuje paralelné čítanie, ale zápis blokuje radu.
Kľúčom je kontrolovať prístup k poľu pomocou synchronizácie, aby sa predišlo súčasným zmenám z rôznych vlákien.