Middle+
Atomic менен жөнөкөй өзгөрмөгө жазуу кандай айырмаланат?
sobes.tech AI
AIден жооп
Go тилинде жөнөкөй өзгөрмөгө жазуу операциялары атомдуктыкты кепилдебейт, айрыкча көптөгөн жиптердин чөйрөсүндө. Бул деген, эгер бир нече goroutine бир убакта бир эле өзгөрмөгө окуп жана жазып жатса, жарыш шарттары (race condition) пайда болушу мүмкүн.
sync/atomic пакети аркылуу атомдук операциялар маанилерди атомдук окуу, жазуу жана өзгөртүү үчүн мьютекссиз камсыз кылат. Бул операция толук жана бөлүнбөстөн аткарылат, жарыш шарттарын алдын алат.
Атомдук көбөйтүү мисалы:
import (
"fmt"
"sync/atomic"
)
var counter int64
func increment() {
atomic.AddInt64(&counter, 1)
}
func main() {
increment()
fmt.Println(atomic.LoadInt64(&counter)) // 1
}
Ошентип, атомдук операциялар жөнөкөй өзгөрмөлөргө караганда мьютекссиз натыйжалуу, бирок татаал критикалык бөлүмдөр үчүн ылайыктуу эмес.