Sobes.tech
Middle+

Čime se razlikuje Atomic od običnog dodeljivanja promenljivoj?

sobes.tech АИ

Одговор од АИ

У Go, običan zapis u promenljivu ne garantuje atomarnost operacija, posebno u višestrukom okruženju sa nitima. To znači da ako više gorutina istovremeno čitaju i pišu u istu promenljivu, može doći do uslova trke (race condition).

Atomarne operacije iz paketa sync/atomic obezbeđuju atomarno čitanje, pisanje i modifikaciju vrednosti bez korišćenja mutexa. To znači da se operacija izvršava u celosti i nedeljivo, sprečavajući uslove trke.

Primer atomarnog inkrementa:

import (
    "fmt"
    "sync/atomic"
)

var counter int64

func increment() {
    atomic.AddInt64(&counter, 1)
}

func main() {
    increment()
    fmt.Println(atomic.LoadInt64(&counter)) // 1
}

Dakle, atomarne operacije su efikasnije od mutexa za jednostavne operacije nad promenljivima, ali nisu pogodne za složenije kritične sekcije.