Sobes.tech
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.