Sobes.tech
Junior — Middle

Bir neçə iş parçacığından gələn eyni vaxtda dəyişikliklərə qarşı qorunan massiv necə yaradılır?

sobes.tech Süni İntellekt

AI-dan cavab

iOS (Swift) daxilində çoxsaylı iş parçacığından eyni zamanda dəyişikliklərə qarşı qorunan massiv yaratmaq üçün adətən massivə girişin sinxronizasiyası istifadə olunur. Sadə bir üsul, massivı bir sinifə sarıb, yazma üçün DispatchQueue-nu bariyer tapşırıqları ilə, oxuma üçün isə adi tapşırıqlarla istifadə etməkdir.

Nümunə:

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
    }
}

Bu yanaşma massivdən məlumatların təhlükəsiz şəkildə paralel oxunmasına imkan verir, yazma əməliyyatları isə ardıcıl şəkildə həyata keçirilir və yarış vəziyyətlərinin qarşısını alır. Alternativ olaraq, NSLock və ya digər sinxronizasiya mexanizmlərindən istifadə etmək olar, lakin DispatchQueue ilə bariyerlər daha müasir və rahatdır.