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.