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.Addmenší než početwg.Done, při voláníwg.Donemůže čítač jít do záporných hodnot, což způsobí runtime panic. - Pokud je
wg.Addvětší než početwg.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.