Junior — Middle
Έχετε χρησιμοποιήσει τον μηχανισμό συγχρονισμού με το sync.WaitGroup στα έργα σας;
sobes.tech AI
Απάντηση από AI
Ναι, στα έργα Go συχνά χρησιμοποιείται το sync.WaitGroup για συγχρονισμό των goroutines. Αυτός ο μηχανισμός επιτρέπει την αναμονή για την ολοκλήρωση μιας ομάδας παράλληλων εργασιών πριν συνεχίσει.
Αρχή λειτουργίας:
- Δημιουργείται ένα αντικείμενο
WaitGroup. - Πριν από την εκκίνηση κάθε goroutine, καλείται το
Add(1)για να αυξήσει τον μετρητή. - Μέσα στη goroutine, μετά την ολοκλήρωση της εργασίας, καλείται το
Done(), που μειώνει τον μετρητή. - Η κύρια goroutine καλεί το
Wait(), το οποίο μπλοκάρει μέχρι ο μετρητής να γίνει μηδέν.
Παράδειγμα:
var wg sync.WaitGroup
wg.Add(2) // περιμένουμε 2 goroutines
go func() {
defer wg.Done()
// εργασία της πρώτης goroutine
}()
go func() {
defer wg.Done()
// εργασία της δεύτερης goroutine
}()
wg.Wait() // περιμένουμε να ολοκληρωθούν και οι δύο
Αυτό είναι χρήσιμο για τον συντονισμό παράλληλων λειτουργιών και την αποτροπή πρόωρου τερματισμού του προγράμματος.