Sobes.tech
Junior — Middle

Da li struktura podataka niz obezbeđuje sigurnost pri istovremenom pristupu iz više niti?

sobes.tech АИ

Одговор од АИ

Nizovi u iOS (na primer, NSArray ili Array u Swift-u) podrazumevano nisu sigurni za niti. To znači da, pri istovremenom pristupu iz više niti bez dodatne sinhronizacije, može doći do uslova trke, što će dovesti do nepredvidivog ponašanja ili pada aplikacije.

Da bi se obezbedila sigurnost pri višestrukom pristupu, potrebno je koristiti mehanizme sinhronizacije, kao što su DispatchQueue sa barijerama, NSLock ili drugi primitives za sinhronizaciju. U Swift-u, takođe, možete koristiti DispatchQueue sa atributom .concurrent i metode sync ili async(flags: .barrier) za sigurno čitanje i pisanje.

Primer korišćenja DispatchQueue za sigurni pristup nizu:

class ThreadSafeArray<T> {
    private var array = [T]()
    private let queue = DispatchQueue(label: "com.example.threadSafeArray", attributes: .concurrent)

    func append(_ element: T) {
        queue.async(flags: .barrier) {
            self.array.append(element)
        }
    }

    func get(at index: Int) -> T? {
        var result: T?
        queue.sync {
            if index < self.array.count {
                result = self.array[index]
            }
        }
        return result
    }
}

Na ovaj način, nizovi sami po sebi ne garantuju sigurnost pri istovremenom pristupu iz više niti.