Sobes.tech
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 βοηθά στην συγχρονισμένη εκτέλεση παράλληλων εργασιών και στην αναμονή της ολοκλήρωσής τους.