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")