Junior — Middle
Jakie funkcje zapewnia struktura WaitGroup w języku Go do synchronizacji goroutine?
sobes.tech AI
Odpowiedź od AI
W języku Go struktura sync.WaitGroup służy do synchronizacji wielu gorutyn, umożliwiając głównej gorutynie oczekiwanie na ich zakończenie.
Główne metody WaitGroup:
-
Add(delta int)— zwiększa lub zmniejsza licznik oczekiwanych gorutyn. Zazwyczaj wywoływana przed uruchomieniem gorutyn. -
Done()— zmniejsza licznik o 1, wywoływana na końcu pracy gorutyny. -
Wait()— blokuje wykonanie do momentu, gdy licznik nie osiągnie zera.
Przykład użycia:
var wg sync.WaitGroup
wg.Add(3) // oczekujemy 3 gorutyn
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // sygnalizujemy zakończenie
fmt.Println("Gorutyna", id)
}(i)
}
wg.Wait() // czekamy na zakończenie wszystkich gorutyn
fmt.Println("Wszystkie gorutyny zakończone")
W ten sposób WaitGroup pomaga koordynować równoległe wykonanie i zapewnia, że program nie zakończy się wcześniej niż powinien.