Junior — Middle
Ποιες συνέπειες θα προκύψουν αν ο αριθμός των κλήσεων wg.Add δεν ταιριάζει με τον αριθμό των τρεχουσών goroutines;
sobes.tech AI
Απάντηση από AI
Στη Go, το sync.WaitGroup χρησιμοποιείται για να περιμένει την ολοκλήρωση ενός συνόλου goroutines. Η μέθοδος wg.Add(n) αυξάνει τον μετρητή κατά n, και το wg.Done() τον μειώνει κατά 1. Αν ο αριθμός των κλήσεων στο wg.Add δεν ταιριάζει με τον αριθμό των goroutines που έχουν ξεκινήσει (δηλαδή, τις κλήσεις στο wg.Done), τότε:
- Αν το
wg.Addείναι μικρότερο από τον αριθμό τουwg.Done, τότε κατά την κλήση τουwg.Done, ο μετρητής μπορεί να γίνει αρνητικός, κάτι που θα προκαλέσει panic (σφάλμα κατά την εκτέλεση). - Αν το
wg.Addείναι μεγαλύτερο από τον αριθμό τουwg.Done, η κλήσηwg.Wait()θα μπλοκάρει για πάντα, καθώς ο μετρητής δεν θα φτάσει το μηδέν — αυτό θα οδηγήσει σε deadlock.
Επομένως, είναι σημαντικό να καλείτε το wg.Add με τον σωστό αριθμό πριν ξεκινήσετε τις goroutines και να καλείτε το wg.Done ακριβώς τόσες φορές όσες προστέθηκαν.