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