Sobes.tech
Junior — Middle

Milliseid atomaarseid operatsioone Swiftis tead?

sobes.tech AI

Vastus AI-lt

Swiftis on tavaliselt seotud jagatud ressurssidele turvalise juurdepääsuga mitme niidiga keskkonnas. Keel ise ei paku sisseehitatud atomaarsed primitiive, kuid neid saab kasutada:

  • DispatchQueue koos sünkroniseerimisega sync või async kaudu järjestikuseks juurdepääsuks.
  • OSAtomic funktsioonid (vana, ei soovitata).
  • stdatomic.h C11-st, C tasemel atomaarsed operatsioonid.
  • NSLock, NSRecursiveLock ja teised lukustuse objektid kriitiliste sektsioonide kaitsmiseks.
  • Alates Swift 5.5+ saab kasutada @Sendable ja actor turvaliseks oleku töötlemiseks.

Näide atomaarsest suurendamisest, kasutades 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 }
    }
}

Seega, Swiftis rakenduvad atomaarsed operatsioonid sünkroniseerimise ja lukustamise kaudu, mitte sisseehitatud atomaarsed primitiivide kaudu.