Sobes.tech
Junior — Middle

Wie erstellt man ein Array, das vor gleichzeitigen Änderungen durch mehrere Threads geschützt ist?

sobes.tech KI

Antwort von AI

Um Array, das gegen gleichzeitige Änderungen durch mehrere Threads in iOS (Swift) geschützt werden soll, wird üblicherweise durch Synchronisierung des Zugriffs auf das Array erstellt. Eine einfache Methode ist, das Array in eine Klasse zu kapseln und DispatchQueue mit Barriereaufgaben für Schreibzugriffe und normalen Aufgaben für Lesezugriffe zu verwenden.

Beispiel:

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

Dieser Ansatz ermöglicht es, Daten aus dem Array sicher parallel zu lesen, während Schreiboperationen sequenziell ausgeführt werden, um Race Conditions zu vermeiden. Alternativ kann man NSLock oder andere Synchronisationsmechanismen verwenden, aber DispatchQueue mit Barrieren ist eine modernere und bequemere Methode.