Middle+
Pastāsti man vairāk par WaitGroup: kā tas darbojas, ko dara Add, Done, Wait?
sobes.tech AI
Atbilde no AI
Go valodā WaitGroup tiek izmantots, lai gaidītu, kamēr grupa gorutīnu pabeigs darbu.
- Add(n int) — palielina skaitītāju par n, parasti izsauc pirms gorutīnu palaišanas.
- Done() — samazina skaitītāju par 1, izsauc pēc darba pabeigšanas gorutīnā.
- Wait() — bloķē izpildi, līdz skaitītājs sasniedz nulli, tas ir, līdz visas gorutīnas izsauc Done.
Piemērs:
var wg sync.WaitGroup
wg.Add(3) // gaidām 3 gorutīnas
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
fmt.Println("Gorutīna", id, "pabeigta")
}(i)
}
wg.Wait() // gaidām, līdz visas gorutīnas pabeigs darbu
fmt.Println("Visas gorutīnas ir pabeigtas")
Tādējādi WaitGroup palīdz sinhronizēt paralēlas uzdevumus un gaidīt to pabeigšanu.