Назад к вопросам
DNS
Честный Знак
Junior — Middle
74
Каким образом обеспечить безопасность доступа к массиву в многопоточной среде?
Компании, где спрашивали
БКС
Ответ от нейросети
sobes.tech AI
Для обеспечения безопасности доступа к массиву в многопоточной среде в iOS (Swift) обычно используют механизмы синхронизации, чтобы избежать состояния гонки и повреждения данных.
Основные подходы:
- Сериализация доступа через 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]
}
}
- Использование NSLock или других примитивов блокировки
let lock = NSLock()
var array: [Int] = []
func appendElement(_ element: Int) {
lock.lock()
array.append(element)
lock.unlock()
}
- Использование concurrent queue с барьерами (Dispatch barriers) для чтения/записи
Это позволяет параллельно читать, но запись блокирует очередь.
Таким образом, ключ — контролировать доступ к массиву через синхронизацию, чтобы избежать одновременного изменения из разных потоков.