Sobes.tech
Junior — Middle

Cum asigurați securitatea accesului la un array într-un mediu multi-thread?

sobes.tech AI

Răspuns de la AI

Pentru a asigura siguranța accesului la un array într-un mediu multi-thread în iOS (Swift), se utilizează de obicei mecanisme de sincronizare pentru a evita condițiile de cursă și corupția datelor.

Abordări principale:

  1. Serializarea accesului prin 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. Utilizarea NSLock sau a altor primitive de blocare
let lock = NSLock()
var array: [Int] = []

func appendElement(_ element: Int) {
    lock.lock()
    array.append(element)
    lock.unlock()
}
  1. Utilizarea unei cozi concurente cu bariere (Dispatch barriers) pentru citire/scriere

Aceasta permite citirea în paralel, dar scrierea blochează coada.

Prin urmare, cheia este controlul accesului la array prin sincronizare pentru a evita modificările simultane din diferiți fire de execuție.