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