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