Sobes.tech
Junior — Middle

Ποιες λειτουργίες παρέχει η δομή WaitGroup στη γλώσσα Go για τον συγχρονισμό των goroutines;

sobes.tech AI

Απάντηση από AI

Στη γλώσσα προγραμματισμού Go, η δομή sync.WaitGroup χρησιμοποιείται για τον συγχρονισμό πολλαπλών goroutines, επιτρέποντας στη βασική goroutine να περιμένει την ολοκλήρωση των άλλων.

Οι βασικές μέθοδοι του WaitGroup:

  • Add(delta int) — αυξάνει ή μειώνει τον μετρητή των αναμενόμενων goroutines. Συνήθως καλείται πριν την εκκίνηση των goroutines.

  • Done() — μειώνει τον μετρητή κατά 1, καλείται στο τέλος της εργασίας της goroutine.

  • Wait() — μπλοκάρει την εκτέλεση μέχρι ο μετρητής να γίνει μηδέν.

Παράδειγμα χρήσης:

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 βοηθά στον συντονισμό της παράλληλης εκτέλεσης και διασφαλίζει ότι το πρόγραμμα δεν θα τερματίσει νωρίτερα.