Middle+
Čím sa líši Atomic od bežného priradenia do premennej?
sobes.tech AI
Odpoveď od AI
V jazyku Go bežná zápis do premennej nezaručuje atomickosť operácií, najmä v prostredí s viacerými vláknami. To znamená, že ak niekoľko gorútín súčasne číta a zapisuje do jednej premennej, môže dôjsť k stavu závodu (race condition).
Atomické operácie z balíka sync/atomic zabezpečujú atomické čítanie, zápis a zmenu hodnôt bez použitia mutexov. To znamená, že operácia je vykonaná ako celok a nedeliteľne, čím sa predchádza stavom závodu.
Príklad atomického inkrementu:
import (
"fmt"
"sync/atomic"
)
var counter int64
func increment() {
atomic.AddInt64(&counter, 1)
}
func main() {
increment()
fmt.Println(atomic.LoadInt64(&counter)) // 1
}
Atomické operácie sú teda efektívnejšie než mutexy pre jednoduché operácie nad premennými, ale nie sú vhodné pre zložité kritické sekcie.