Junior — Middle
Hoe zorg je voor veilige toegang tot een array in een multithread-omgeving?
sobes.tech AI
Antwoord van AI
Om de toegang tot een array in een multithread-omgeving op iOS (Swift) veilig te stellen, worden meestal synchronisatiemechanismen gebruikt om racecondities en gegevensbeschadiging te voorkomen.
Belangrijkste benaderingen:
- Serialiseren van toegang via 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]
}
}
- Gebruik van NSLock of andere vergrendelingsprimitive
let lock = NSLock()
var array: [Int] = []
func appendElement(_ element: Int) {
lock.lock()
array.append(element)
lock.unlock()
}
- Gebruik van een gelijktijdige wachtrij met barrières (Dispatch barriers) voor lezen/schrijven
Dit maakt gelijktijdig lezen mogelijk, maar schrijven blokkeert de wachtrij.
De sleutel is dus om toegang tot de array te controleren via synchronisatie om gelijktijdige wijzigingen door verschillende threads te voorkomen.