Junior — Middle
Jakie rodzaje operacji atomowych w Swift znasz?
sobes.tech AI
Odpowiedź od AI
W Swift operacje atomowe są zazwyczaj związane z bezpiecznym dostępem do zasobów współdzielonych w środowisku wielowątkowym. Sam język nie zapewnia wbudowanych primitive atomowych, ale można używać:
- DispatchQueue z synchronizacją przez
synclubasyncdla dostępu sekwencyjnego. - Funkcji OSAtomic (przestarzałe, niezalecane).
- stdatomic.h z C11 do operacji atomowych na poziomie C.
- NSLock, NSRecursiveLock i inne obiekty blokujące do ochrony sekcji krytycznych.
- Od Swift 5.5+ można używać
@Sendableiactordo bezpiecznej pracy ze stanem.
Przykład atomowego inkrementowania za pomocą 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 }
}
}
W ten sposób operacje atomowe w Swift są realizowane przez synchronizację i blokady, a nie przez wbudowane primitive atomowe.