Junior — Middle
Aké dôsledky nastanú, ak počet volaní wg.Add nezodpovedá počtu spustených gorutín?
sobes.tech AI
Odpoveď od AI
U Go, sync.WaitGroup sa používa na čakanie na dokončenie skupiny gorutín. Metóda wg.Add(n) zvyšuje čítač o n, a wg.Done() ho znižuje o 1. Ak počet počtu volaní wg.Add nezodpovedá počtu spustených gorutín (t.j. volaniam wg.Done), potom:
- Ak je
wg.Addmenšie ako početwg.Done, pri volaníwg.Donesa čítač môže stať záporným, čo spôsobí runtime panic. - Ak je
wg.Addväčšie ako početwg.Done, volaniewg.Wait()bude navždy blokovať, pretože čítač nedosiahne nulu — čo povedie k deadlocku.
Preto je dôležité volať wg.Add s správnym číslom pred spustením gorutín a volať wg.Done presne toľkokrát, koľko bolo pridané.