Junior
Πώς στον προγραμματισμό (Go) ανιχνεύουμε ότι όλα τα τρέχοντα νήματα έχουν ολοκληρωθεί και το κύριο νήμα μπορεί να χρησιμοποιήσει τα αποτελέσματα;
sobes.tech AI
Απάντηση από AI
Στη Go, για την παρακολούθηση της ολοκλήρωσης όλων των τρεχουσών goroutines, συνήθως χρησιμοποιείται ο τύπος sync.WaitGroup. Επιτρέπει στο κύριο νήμα να περιμένει μέχρι όλες οι goroutines να ολοκληρώσουν την εκτέλεσή τους.
Παράδειγμα χρήσης:
var wg sync.WaitGroup
wg.Add(3) // περιμένουμε 3 goroutines
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // σηματοδοτεί το τέλος της goroutine
// εργασία της goroutine
fmt.Println("Goroutine", id, "ολοκληρώθηκε")
}(i)
}
wg.Wait() // το κύριο νήμα μπλοκάρει μέχρι ο μετρητής του wg να γίνει 0
fmt.Println("Όλες οι goroutines έχουν ολοκληρωθεί, τα αποτελέσματα μπορούν να χρησιμοποιηθούν")
Έτσι, το WaitGroup επιτρέπει τον συγχρονισμό της εκτέλεσης και διασφαλίζει ότι το ελεγκτικό νήμα θα περιμένει την ολοκλήρωση όλων των παράλληλων εργασιών.