Junior
Για ποιο λόγο χρησιμοποιείται το WaitGroup στο Go;
sobes.tech AI
Απάντηση από AI
Το WaitGroup χρησιμοποιείται για τον συγχρονισμό της εργασίας μιας ή πολλών goroutines. Επιτρέπει στη κύρια goroutine να περιμένει την ολοκλήρωση άλλων δημιουργημένων goroutines. Αποτελείται από έναν μετρητή που αυξάνεται κατά τη δημιουργία μιας goroutine και μειώνεται όταν αυτή ολοκληρώνεται.
Βασικές μέθοδοι:
Add(delta int): Αυξάνει ή μειώνει τον μετρητή των goroutines.Done(): Μειώνει τον μετρητή κατά 1. Καλείται συνήθως στο τέλος μιας goroutine (συχνά μεdefer).Wait(): μπλοκάρει την εκτέλεση μέχρι ο μετρητής να γίνει μηδέν.
Παράδειγμα χρήσης:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Μειώνει τον μετρητή στο τέλος της goroutine
fmt.Printf("Goroutine %d ξεκινά\n", id)
// Προσομοίωση εργασίας
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d ολοκληρώθηκε\n", id)
}
func main() {
var wg sync.WaitGroup // Δημιουργία WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Αυξάνουμε τον μετρητή για κάθε goroutine
go worker(i, &wg) // Ξεκινάμε τη goroutine, περνώντας δείκτη στο WaitGroup
}
wg.Wait() // Περιμένουμε μέχρι ο μετρητής να γίνει 0 (όλες οι goroutines ολοκληρώνονται)
fmt.Println("Όλες οι goroutines ολοκληρώθηκαν")
}