Sobes.tech
Junior — Middle

Jaké druhy atomárních operací v Swiftu znáš?

sobes.tech AI

Odpověď od AI

V Swiftu jsou atomové operace obvykle spojeny s bezpečným přístupem ke sdíleným zdrojům v prostředí s více vlákny. Jazyk sám o sobě ne poskytuje vestavěné atomové primitives, ale lze použít:

  • DispatchQueue s synchronizací přes sync nebo async pro sekvenční přístup.
  • Funkce OSAtomic (zastaralé, nedoporučuje se).
  • stdatomic.h z C11 pro atomové operace na úrovni C.
  • NSLock, NSRecursiveLock a další objekty zámků pro ochranu kritických sekcí.
  • Od Swift 5.5+ lze použít @Sendable a actor pro bezpečnou práci se stavem.

Příklad atomického inkrementu pomocí DispatchQueue:

class AtomicCounter {
    private var value = 0
    private let queue = DispatchQueue(label: "atomic.counter.queue")

    func increment() {
        queue.sync {
            value += 1
        }
    }

    func get() -> Int {
        return queue.sync { value }
    }
}

Tímto způsobem jsou atomové operace v Swift realizovány prostřednictvím synchronizace a zámků, nikoli prostřednictvím vestavěných atomových primitives.