Junior — Middle
Ce consecințe vor apărea dacă numărul apelurilor la wg.Add nu corespunde numărului de goroutines în execuție?
sobes.tech AI
Răspuns de la AI
În Go, sync.WaitGroup este folosit pentru a aștepta finalizarea unui set de goroutines. Metoda wg.Add(n) crește contorul cu n, iar wg.Done() îl scade cu 1. Dacă numărul de apeluri la wg.Add nu corespunde cu numărul de goroutines lansate (adică, apelurile la wg.Done), atunci:
- Dacă
wg.Addeste mai mic decât numărul dewg.Done, atunci la apelareawg.Done, contorul poate deveni negativ, ceea ce va duce la o panică (eroare de execuție). - Dacă
wg.Addeste mai mare decât numărul dewg.Done, apelulwg.Wait()se va bloca pentru totdeauna, deoarece contorul nu va ajunge la zero — ceea ce va duce la un deadlock.
De aceea, este important să apelați wg.Add cu numărul corect înainte de a porni goroutines și să apelați wg.Done exact de atâtea ori câte s-au adăugat.