Middle+
Atomic va oddiy o'zgaruvchiga yozish o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
Go tilida oddiy tayinlash o'zgaruvchiga operatsiyalar atomarligini kafolatlamaydi, ayniqsa ko'p ipli muhitda. Bu shuni anglatadiki, agar bir nechta goroutinlar bir vaqtning o'zida bir o'zgaruvchga o'qish va yozish amalga oshirayotgan bo'lsa, raqobat holati (race condition) yuzaga kelishi mumkin.
sync/atomic paketidan atomar operatsiyalar qiymatlarni mutexlarsiz atomar o'qish, yozish va o'zgartirishni ta'minlaydi. Bu operatsiya butun va bo'linmas holda bajariladi, bu esa raqobat holatlarini oldini oladi.
Atomar inkrement misoli:
import (
"fmt"
"sync/atomic"
)
var counter int64
func increment() {
atomic.AddInt64(&counter, 1)
}
func main() {
increment()
fmt.Println(atomic.LoadInt64(&counter)) // 1
}
Shu bilan birga, atomar operatsiyalar oddiy o'zgaruvchilar uchun mutexlardan samaraliroq, ammo murakkab kritik bo'limlar uchun mos emas.