Sobes.tech
Junior — Middle

Milyen atomikus műveleteket ismersz Swiftben?

sobes.tech MI

Válasz az MI-től

Swiftben az atomikus műveletek általában a megosztott erőforrások biztonságos hozzáféréséhez kapcsolódnak több szálas környezetben. A nyelv nem nyújt beépített atomikus primitív műveleteket, de használhatók:

  • DispatchQueue szinkronizálással sync vagy async segítségével sorba rendezett hozzáféréshez.
  • OSAtomic függvények (elavultak, nem ajánlottak).
  • stdatomic.h a C11-ből, C szintű atomikus műveletekhez.
  • NSLock, NSRecursiveLock és más zárolási objektumok a kritikus szekciók védelmére.
  • A Swift 5.5+ verziótól kezdve használható a @Sendable és az actor a biztonságos állapotkezeléshez.

Példa atomikus növelésre a DispatchQueue segítségével:

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 }
    }
}

Így az atomikus műveletek Swiftben szinkronizáció és zárolás révén valósulnak meg, nem beépített atomikus primitívek használatával.