Sobes.tech
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.