Junior
Kam naudojamas WaitGroup Go?
sobes.tech AI
Atsakymas iš AI
WaitGroup naudojamas sinchronizuoti vienos ar kelių gorutinių darbą. Jis leidžia pagrindinei gorutinei laukti kitų sukurtų gorutinių užbaigimo. Sudarytas iš skaitiklio, kuris didėja, kai kuriama gorutina, ir mažėja, kai ji baigiama.
Pagrindiniai metodai:
Add(delta int): Padidina arba sumažina gorutinių skaitiklį.Done(): Sumažina skaitiklį 1. Paprastai kviečiama gorutinos pabaigoje (dažnai sudefer).Wait(): Blokuoja vykdymą, kol skaitiklis nepasiekia nulio.
Pavyzdys:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Sumažina skaitiklį, kai gorutina baigiasi
fmt.Printf("Gorutina %d pradeda\n", id)
// Darbo imitacija
// time.Sleep(time.Second)
fmt.Printf("Gorutina %d baigė\n", id)
}
func main() {
var wg sync.WaitGroup // Sukuriamas WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Padidinti skaitiklį kiekvienai gorutinei
go worker(i, &wg) // Paleisti gorutina, perduodant nuorodą į WaitGroup
}
wg.Wait() // Laukti, kol skaitiklis pasieks nulį (visos gorutinos baigsis)
fmt.Println("Visos gorutinos baigėsi")
}