Sobes.tech
Junior — Middle

Jakie rodzaje operacji atomowych w Swift znasz?

sobes.tech AI

Odpowiedź od AI

W Swift operacje atomowe są zazwyczaj związane z bezpiecznym dostępem do zasobów współdzielonych w środowisku wielowątkowym. Sam język nie zapewnia wbudowanych primitive atomowych, ale można używać:

  • DispatchQueue z synchronizacją przez sync lub async dla dostępu sekwencyjnego.
  • Funkcji OSAtomic (przestarzałe, niezalecane).
  • stdatomic.h z C11 do operacji atomowych na poziomie C.
  • NSLock, NSRecursiveLock i inne obiekty blokujące do ochrony sekcji krytycznych.
  • Od Swift 5.5+ można używać @Sendable i actor do bezpiecznej pracy ze stanem.

Przykład atomowego inkrementowania za 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 }
    }
}

W ten sposób operacje atomowe w Swift są realizowane przez synchronizację i blokady, a nie przez wbudowane primitive atomowe.