Sobes.tech
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 колдонуу бөлүштүрүлгөн маалыматтарга бир убакта кирүүнү алдын алат жана жарыштарды жокко чыгарат.