Sobes.tech
Middle

Kann man Synchronisation (synchronized) auf eine Variable anwenden?

sobes.tech KI

Antwort von AI

Nein, das Schlüsselwort synchronized existiert in Swift nicht. Für die Synchronisierung des Zugriffs auf Variablen in Multithread-Umgebungen werden andere Mechanismen verwendet:

  • Dispatch-Queues: Serielle Queues ermöglichen die sequenzielle Ausführung von Codeblöcken und garantieren, dass nur ein Thread gleichzeitig mit der Variable arbeitet.

    // Serielle Queue zur Synchronisation
    let queue = DispatchQueue(label: "com.myapp.syncQueue")
    
    var sharedVariable = 0
    
    func updateSharedVariable() {
        queue.sync {
            // Synchrone Zugriff auf die Variable innerhalb der Queue
            sharedVariable += 1
            print(sharedVariable)
        }
    }
    
  • NSLock/NSRecursiveLock: Ermöglichen das Sperren des Zugriffs auf einen Codeabschnitt.

    import Foundation
    
    let lock = NSLock()
    var sharedArray = [Int]()
    
    func addToSharedArray(value: Int) {
        lock.lock() // Mutex sperren
        sharedArray.append(value)
        print("Hinzugefügt: \(value). Array: \(sharedArray)")
        lock.unlock() // Mutex freigeben
    }
    
  • Operationen und OperationQueues: Bieten eine hochstufige Möglichkeit, parallele Aufgaben zu verwalten, einschließlich Abhängigkeiten und Prioritäten.

  • @synchronized (Objective-C): In Objective-C gab es ein ähnliches Mechanismus, aber dieser ist in Swift nicht direkt verfügbar und erfordert die Verwendung von Brücken zu Objective-C. Es wird empfohlen, native Swift-Lösungen (Dispatch Queues, Locks) zu verwenden.

Die Wahl des Mechanismus hängt von der spezifischen Aufgabe ab. Dispatch Queues sind oft die bequemste und leistungsfähigste Methode für einfache Synchronisation beim Zugriff auf Daten.