Sobes.tech
Junior — Middle

Quali tipi di operazioni atomiche in Swift conosci?

sobes.tech AI

Risposta dell'AI

In Swift, le operazioni atomiche sono generalmente associate a un accesso sicuro alle risorse condivise in ambienti multithread. Il linguaggio stesso non fornisce primitive atomiche integrate, ma è possibile utilizzare:

  • DispatchQueue con sincronizzazione tramite sync o async per accesso sequenziale.
  • Funzioni OSAtomic (obsoleti, non raccomandate).
  • stdatomic.h di C11 per operazioni atomiche a livello di C.
  • NSLock, NSRecursiveLock e altri oggetti di blocco per proteggere le sezioni critiche.
  • A partire da Swift 5.5+, si può usare @Sendable e actor per lavorare in modo sicuro con lo stato.

Esempio di incremento atomico usando 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 }
    }
}

In questo modo, le operazioni atomiche in Swift vengono implementate tramite sincronizzazione e blocco, non tramite primitive atomiche integrate.