Sobes.tech
Junior — Middle

Ce tipuri de operații atomice în Swift cunoști?

sobes.tech AI

Răspuns de la AI

În Swift, operațiile atomice sunt de obicei asociate cu accesul sigur la resurse partajate într-un mediu multi-thread. Limbajul în sine nu oferă primitive atomice încorporate, dar se pot folosi:

  • DispatchQueue cu sincronizare prin sync sau async pentru acces secvențial.
  • Funcții OSAtomic (învechite, nerecomandate).
  • stdatomic.h din C11 pentru operații atomice la nivel de C.
  • NSLock, NSRecursiveLock și alte obiecte de blocare pentru protejarea secțiunilor critice.
  • În Swift 5.5+ se poate folosi @Sendable și actor pentru a lucra în siguranță cu starea.

Exemplu de incrementare atomică folosind 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 }
    }
}

Astfel, operațiile atomice în Swift sunt implementate prin sincronizare și blocare, nu prin primitive atomice încorporate.