Sobes.tech
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.