Sobes.tech
Junior — Middle

Kas saaksite selgitada, kuidas töötab WaitGroup-mehhanism, mis ootab mitme gorutina lõpetamist Go keeles?

sobes.tech AI

Vastus AI-lt

Go keeles kasutatakse sync.WaitGroup tüüpi, et oodata mitme goroutine'i lõpetamist. See võimaldab "liituda" mitme goroutine'iga ja takistada täitmist kuni kõik lõpetavad.

WaitGroup-i peamised meetodid:

  • Add(n int) — suurendab loendurit n-iga, tavaliselt kutsutakse enne goroutine'ide käivitamist.
  • Done() — vähendab loendurit 1-iga, kutsutakse iga goroutine'i lõpus.
  • Wait() — takistab täitmist kuni loendur jõuab 0-ni.

Näide kasutamisest:

var wg sync.WaitGroup

wg.Add(3) // ootame 3 goroutine'i

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // märgime lõpetamist
        fmt.Printf("Goroutine %d töötab\n", id)
        // mingi töö
    }(i)
}

wg.Wait() // ootame, kuni kõik goroutine'id lõpetavad
fmt.Println("Kõik goroutine'id on lõpetanud")