Middle+
Πες μου περισσότερα για το WaitGroup: πώς λειτουργεί, τι κάνουν τα Add, Done, Wait;
sobes.tech AI
Απάντηση από AI
Το WaitGroup στο Go χρησιμοποιείται για την αναμονή της ολοκλήρωσης μιας ομάδας goroutines.
- Add(n int) — αυξάνει τον μετρητή κατά n, καλείται συνήθως πριν την εκκίνηση των goroutines.
- Done() — μειώνει τον μετρητή κατά 1, καλείται μέσα στη goroutine μετά την ολοκλήρωση της εργασίας.
- Wait() — μπλοκάρει την εκτέλεση μέχρι ο μετρητής να γίνει μηδέν, δηλαδή μέχρι όλες οι goroutines να καλέσουν το Done.
Παράδειγμα:
var wg sync.WaitGroup
wg.Add(3) // περιμένουμε 3 goroutines
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
fmt.Println("Goroutine", id, "ολοκληρώθηκε")
}(i)
}
wg.Wait() // περιμένουμε να ολοκληρωθούν όλες οι goroutines
fmt.Println("Όλες οι goroutines έχουν ολοκληρωθεί")
Έτσι, το WaitGroup βοηθά στην συγχρονισμένη εκτέλεση παράλληλων εργασιών και στην αναμονή της ολοκλήρωσής τους.