Sobes.tech
Middle+

WaitGroup жөнүндө көбүрөөк айтып бер: ал кандай иштейт, Add, Done, Wait эмне кылат?

sobes.tech AI

AIден жооп

Go'да WaitGroup бир топ goroutine'лердин аякташын күтүү үчүн колдонулат.

  • Add(n int) — эсептегичти nге көбөйтөт, адатта goroutine'лерди ишке киргизүүдөн мурун чакырылат.
  • Done() — эсептегичти 1ге азайтат, иш аяктагандан кийин goroutine ичинде чакырылат.
  • Wait() — эсептегич нөлгө жеткенче ишти токтотот, башкача айтканда, бардык goroutine'лер Done чакырганча күтөт.

Мисал:

var wg sync.WaitGroup
wg.Add(3) // 3 goroutine күтүп жатабыз

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done()
        fmt.Println("Goroutine", id, "аяктады")
    }(i)
}

wg.Wait() // бардык goroutine'лер аяктагандан кийин күтөт
fmt.Println("Бардык goroutine'лер аяктады")

Мындайча айтканда, WaitGroup параллел иштерди синхрондоштуруу жана алардын аяктоо убактысын күтүүгө жардам берет.