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 πριν συνεχίσει ή τερματίσει.