Junior — Middle
Kā nodrošināt drošu piekļuvi masīvam daudzšūnu vidē?
sobes.tech AI
Atbilde no AI
Lai nodrošinātu drošu piekļuvi masīvam daudzķēdēs vidē iOS (Swift), parasti izmanto sinhronizācijas mehānismus, lai izvairītos no sacensību stāvokļiem un datu bojājumiem.
Galvenie pieejas veidi:
- Piekļuves serializācija, izmantojot 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]
}
}
- Izmantot NSLock vai citus slēdzenes primitīvus
let lock = NSLock()
var array: [Int] = []
func appendElement(_ element: Int) {
lock.lock()
array.append(element)
lock.unlock()
}
- Izmantot paralēlo rindu ar barjerām (Dispatch barriers) lasīšanai/rakstīšanai
Tas ļauj lasīt paralēli, bet rakstīšana bloķē rindu.
Galvenais ir kontrolēt piekļuvi masīvam, izmantojot sinhronizāciju, lai novērstu vienlaicīgas izmaiņas no dažādām pavedieniem.