Sobes.tech
Junior — Middle

Vai jūs varat izskaidrot, kā darbojas gaidīšanas mehānisms, kas gaida vairākas gorutīnas Go valodā, izmantojot WaitGroup?

sobes.tech AI

Atbilde no AI

Go valodā, lai gaidītu vairākas gorutīnas pabeigšanu, tiek izmantots sync.WaitGroup tips. Tas ļauj "pierakstīties" uz vairākām gorutīnām un bloķēt izpildi līdz brīdim, kad visas tās pabeigsies.

Galvenās WaitGroup metodes:

  • Add(n int) — palielina skaitītāju par n, parasti izsauc pirms gorutīnu palaišanas.
  • Done() — samazina skaitītāju par 1, izsauc katras gorutīnas beigās.
  • Wait() — bloķē izpildi līdz skaitītājs sasniedz 0.

Piemērs lietošanai:

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() // signāls par pabeigšanu
        fmt.Printf("Gorutina %d darbojas\n", id)
        // kāds darbs
    }(i)
}

wg.Wait() // gaidām, līdz visas gorutīnas pabeigsies
fmt.Println("Visas gorutīnas ir pabeigtas")