Sobes.tech
Junior — Middle

Jak zajistit bezpečnost přístupu k poli v prostředí s více vlákny?

sobes.tech AI

Odpověď od AI

Pro zajištění bezpečného přístupu k poli v prostředí s více vlákny v iOS (Swift) se obvykle používají mechanismy synchronizace, aby se zabránilo závodním podmínkám a poškození dat.

Hlavní přístupy:

  1. Serializace přístupu 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]
    }
}
  1. Použití NSLock nebo jiných primitiv blokování
let lock = NSLock()
var array: [Int] = []

func appendElement(_ element: Int) {
    lock.lock()
    array.append(element)
    lock.unlock()
}
  1. Použití konkurenční fronty s bariérami (Dispatch barriers) pro čtení/zápis

To umožňuje paralelní čtení, ale zápis blokuje frontu.

Klíčem je řídit přístup k poli pomocí synchronizace, aby se zabránilo současným změnám z různých vláken.