Sobes.tech
Junior — Middle

Jaké důsledky nastanou, pokud počet volání wg.Add nebude odpovídat počtu spuštěných gorutin?

sobes.tech AI

Odpověď od AI

V jazyce Go se sync.WaitGroup používá k tomu, aby se počkalo na dokončení sady gorutin. Metoda wg.Add(n) zvyšuje čítač o n, a wg.Done() ho snižuje o 1. Pokud počet volání wg.Add neodpovídá počtu spuštěných gorutin (tedy volání wg.Done), pak:

  • Pokud je wg.Add menší než počet wg.Done, při volání wg.Done může čítač jít do záporných hodnot, což způsobí runtime panic.
  • Pokud je wg.Add větší než počet wg.Done, volání wg.Wait() bude navždy blokovat, protože čítač nedosáhne nuly — což povede k deadlocku.

Proto je důležité volat wg.Add s správným číslem před spuštěním gorutin a volat wg.Done přesně tolikrát, kolik bylo přidáno.