Sobes.tech
Junior — Middle

მონაცემთა სტრუქტურა მასივი უზრუნველყოფს უსაფრთხოებას ერთდროულად რამდენიმე ნაკადიდან წვდომისას?

sobes.tech AI

პასუხი AI-სგან

iOS-дагы массивдер (мисалы, NSArray же Array Swiftте) алдын ала жол коопсуз эмес. Бул деген, кошумча синхрондоштуруу жок эле бир нече жиптен бир убакта кирүү мүмкүнчүлүгү болбосо, атаандаштык шарт пайда болуп, күтүлбөгөн жүрүм-турумга же колдонмонун чөгүшүнө алып келиши мүмкүн.

Көп жиптүү кирүүнү коопсуз кылуу үчүн синхрондоштуруу механизмдерин колдонуу керек, мисалы, DispatchQueue менен барьерлер, NSLock же башка синхрондоштуруу primitives. Swiftте ошондой эле, .concurrent мүнөздөмөсү менен DispatchQueue колдонуп, sync же async(flags: .barrier) методдору менен коопсуз окуу жана жазуу жүргүзсө болот.

Мисал катары, 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 index < self.array.count {
                result = self.array[index]
            }
        }
        return result
    }
}

Бул ыкма менен, массивдер өзү эле бир нече жиптен бир убакта кирүүгө коопсуздук камсыз кылбайт.