Junior — Middle
Jak zapewnić bezpieczeństwo dostępu do tablicy w środowisku wielowątkowym?
sobes.tech AI
Odpowiedź od AI
Aby zapewnić bezpieczeństwo dostępu do tablicy w środowisku wielowątkowym w iOS (Swift), zwykle używa się mechanizmów synchronizacji, aby uniknąć warunków wyścigu i uszkodzenia danych.
Główne podejścia:
- Serializacja dostępu za 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]
}
}
- Użycie NSLock lub innych prymitywów blokowania
let lock = NSLock()
var array: [Int] = []
func appendElement(_ element: Int) {
lock.lock()
array.append(element)
lock.unlock()
}
- Użycie kolejki współbieżnej z barierami (Dispatch barriers) do odczytu/zapisu
To pozwala na odczyt równoległy, ale zapis blokuje kolejkę.
Kluczem jest kontrola dostępu do tablicy poprzez synchronizację, aby uniknąć jednoczesnych modyfikacji z różnych wątków.