Sobes.tech
Junior — Middle

Sind Sammlungen in Swift thread-sicher für Multithread-Arbeit?

sobes.tech KI

Antwort von AI

Sammlungen in Swift (z.B. Array, Dictionary, Set) sind standardmäßig nicht thread-sicher. Das bedeutet, dass gleichzeitiger Zugriff aus mehreren Threads ohne Synchronisation zu unvorhersehbarem Verhalten und Fehlern führen kann.

Um sicher mit Sammlungen in einer Multithread-Umgebung zu arbeiten, müssen Synchronisationsmechanismen verwendet werden, z.B.:

  • DispatchQueue-Warteschlangen mit Barrieren (barrier) für Schreibzugriffe
  • NSLock oder andere Sperrobjekte
  • Spezialisierte thread-sichere Wrappers

Beispiel für die Verwendung von DispatchQueue für thread-sicheren Zugriff auf ein Array:

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

Daher ist es notwendig, zusätzliche Synchronisationsmittel anzuwenden, um sicher mit Sammlungen in multithreaded Swift-Code zu arbeiten.