Sobes.tech
Junior — Middle

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

sobes.tech AI

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

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

Αρχή λειτουργίας:

  • Πριν από την εκκίνηση κάθε goroutine, καλείται wg.Add(1).
  • Στο τέλος της goroutine, καλείται wg.Done().
  • Στη βασική λειτουργία, καλείται wg.Wait(), που μπλοκάρει την εκτέλεση μέχρι ο μετρητής να γίνει μηδέν.

Παράδειγμα:

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // εργασία goroutine
}()

wg.Wait() // περιμένει να ολοκληρωθούν όλες οι goroutines

Με αυτόν τον τρόπο, το πρόγραμμα εγγυάται ότι θα περιμένει την ολοκλήρωση όλων των goroutines πριν συνεχίσει ή τερματίσει.