Sobes.tech
Junior — Middle

Ποιους τύπους ατομικών λειτουργιών γνωρίζεις στη Swift;

sobes.tech AI

Απάντηση από AI

Στο Swift, οι ατομικές λειτουργίες συνήθως σχετίζονται με ασφαλή πρόσβαση σε κοινόχρηστους πόρους σε περιβάλλον πολλαπλών νημάτων. Η ίδια η γλώσσα δεν παρέχει ενσωματωμένα ατομικά primitives, αλλά μπορούν να χρησιμοποιηθούν:

  • DispatchQueue με συγχρονισμό μέσω sync ή async για διαδοχική πρόσβαση.
  • OSAtomic λειτουργίες (παρωχημένες, μη συνιστώμενες).
  • stdatomic.h από το C11 για ατομικές λειτουργίες σε επίπεδο C.
  • NSLock, NSRecursiveLock και άλλα αντικείμενα κλειδώματος για την προστασία κρίσιμων τμημάτων.
  • Από το Swift 5.5+ μπορεί να χρησιμοποιηθεί το @Sendable και actor για ασφαλή εργασία με την κατάσταση.

Παράδειγμα ατομικής αύξησης με χρήση 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 }
    }
}

Έτσι, οι ατομικές λειτουργίες στο Swift υλοποιούνται μέσω συγχρονισμού και κλειδώματος, και όχι μέσω ενσωματωμένων ατομικών primitives.