Junior
Do czego służy WaitGroup w Go?
sobes.tech AI
Odpowiedź od AI
WaitGroup jest używany do synchronizacji pracy jednej lub wielu gorutyn. Pozwala głównej gorutynie oczekiwać na zakończenie innych utworzonych gorutyn. Składa się z licznika, który zwiększa się podczas tworzenia gorutyny i zmniejsza się po jej zakończeniu.
Główne metody:
Add(delta int): Zwiększa lub zmniejsza licznik gorutyn.Done(): Zmniejsza licznik o 1. Zazwyczaj wywoływana na końcu gorutyny (często z użyciemdefer).Wait(): Blokuje wykonanie do momentu, gdy licznik osiągnie zero.
Przykład użycia:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Zmniejsza licznik po zakończeniu gorutyny
fmt.Printf("Gorutyna %d zaczyna\n", id)
// Symulacja pracy
// time.Sleep(time.Second)
fmt.Printf("Gorutyna %d kończy\n", id)
}
func main() {
var wg sync.WaitGroup // Tworzymy WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Zwiększamy licznik dla każdej gorutyny
go worker(i, &wg) // Uruchamiamy gorutynę, przekazując wskaźnik na WaitGroup
}
wg.Wait() // Czekamy, aż licznik osiągnie zero (wszystkie gorutyny zakończą)
fmt.Println("Wszystkie gorutyny zakończone")
}