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.