Middle+
Mi a különbség az Atomic és egy normál változó hozzárendelése között?
sobes.tech MI
Válasz az MI-től
Go nyelvben egy egyszerű hozzárendelés egy változóhoz nem garantálja az műveletek atomosságát, különösen több szálas környezetben. Ez azt jelenti, hogy ha több goroutine egyidejűleg olvas és ír ugyanarra a változóra, versenyhelyzet (race condition) alakulhat ki.
A sync/atomic csomag atomikus műveletei biztosítják az értékek atomikus olvasását, írását és módosítását mutexek használata nélkül. Ez azt jelenti, hogy a művelet teljes egészében és oszthatatlanul végrehajtódik, megelőzve a versenyhelyzeteket.
Atomikus növelés példája:
import (
"fmt"
"sync/atomic"
)
var counter int64
func increment() {
atomic.AddInt64(&counter, 1)
}
func main() {
increment()
fmt.Println(atomic.LoadInt64(&counter)) // 1
}
Ezért az atomikus műveletek hatékonyabbak, mint a mutexek egyszerű változó műveleteknél, de nem alkalmasak összetettebb kritikus szekciókra.