Sobes.tech
Junior — Middle

Чӣ гуна метавон массиверо, ки аз тағироти ҳамзамон аз чанд нӯг муҳофизат шудааст, эҷод кард?

sobes.tech AI

Ҷавоб аз AI

Барои эҷоди массив, ки аз тағиротҳои ҳамзамон аз ҷониби чандирон муҳофизат шудааст дар iOS (Swift), одатан истифода мешавад ҳамоҳангсозии дастрасӣ ба массив. Як роҳи содда ин аст, ки массивро дар синф пӯшонед ва DispatchQueue-ро бо вазифаҳои бориар барои навиштан ва вазифаҳои оддӣ барои хондан истифода баред.

Масалан:

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 array.indices.contains(index) {
                result = array[index]
            }
        }
        return result
    }

    var count: Int {
        var result = 0
        queue.sync {
            result = array.count
        }
        return result
    }
}

Интихоб ин усул имкон медиҳад, ки маълумотҳоро аз массив бехатар ва параллелона хонда, дар ҳоле ки навиштҳо ба таври сиклӣ иҷро мешаванд, то ҳолатҳои рақобат пешгирӣ шаванд. Алтернатива истифодаи NSLock ё дигар механизмҳои ҳамоҳангсозӣ мебошад, аммо DispatchQueue бо бориарҳо роҳи муосир ва қулай аст.