Middle
Маалыматтардын жарышынын алдын алуу үчүн кандай жолдор бар? Mutex кантип иштейт?
sobes.tech AI
AIден жооп
Маалыматтардын жарышы, бир нече горутин бир убакта жалпы ресурска окуу жана жазуу үчүн кайрылганда, синхрондоштурбоо менен, күтүлбөгөн натыйжаларга алып келет.
Goда маалыматтардын жарышын алдын алуу үчүн, sync.Mutex сыяктуу синхрондоштуруу механизмдери колдонулат. Mutex (өз ара чыгуу) — бул primitive, ал бир убакта бир гана горутин критикалык бөлүмдө иштешин камсыздайт.
Mutexтин иштөө принциби:
- Жалпы ресурска кириштерден мурун, горутин
Lock()чакырып, mutexти жабат. - Эгер mutex мурда эле жабылган болсо, горутин күтөт, ал ачылуусун.
- Ресурстун иши аяктагандан кийин,
Unlock()чакырып, mutexти ачат.
Goда Mutex колдонуу мисалы:
import (
"fmt"
"sync"
)
func main() {
var mu sync.Mutex
эсептегич := 0
көбөйтүү := func() {
mu.Lock()
defer mu.Unlock()
эсептегич++
}
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
defer wg.Done()
көбөйтүү()
}()
}
wg.Wait()
fmt.Println("Эсептегич:", эсептегич)
}
Мындайча айтканда, Mutex колдонуу бөлүштүрүлгөн маалыматтарга бир убакта кирүүнү алдын алат жана жарыштарды жокко чыгарат.