Sobes.tech
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.Add menšie ako počet wg.Done, pri volaní wg.Done sa čítač môže stať záporným, čo spôsobí runtime panic.
  • Ak je wg.Add väčšie ako počet wg.Done, volanie wg.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é.