Sobes.tech
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 ακριβώς τόσες φορές όσες προστέθηκαν.