Sobes.tech
Junior — Middle

Как да осигурим безопасността на достъпа до масив в многонишкова среда?

sobes.tech AI

Отговор от AI

За да осигурите безопасен достъп до масив в многопоточна среда в iOS (Swift), обикновено се използват механизми за синхронизация, за да се избегнат състезателни условия и повреждане на данните.

Основни подходи:

  1. Сериализация на достъпа чрез 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]
    }
}
  1. Използване на NSLock или други примитиви за заключване
let lock = NSLock()
var array: [Int] = []

func appendElement(_ element: Int) {
    lock.lock()
    array.append(element)
    lock.unlock()
}
  1. Използване на конкурентна опашка с бариери (Dispatch barriers) за четене/писане

Това позволява паралелно четене, но записът блокира опашката.

Ключът е да контролирате достъпа до масива чрез синхронизация, за да избегнете едновременни промени от различни нишки.