Junior — Middle
Milyen következményekkel jár, ha a wg.Add hívások száma nem egyezik a futó goroutine-ok számával?
sobes.tech MI
Válasz az MI-től
Go nyelvben a sync.WaitGroup arra szolgál, hogy megvárja egy csoport goroutine befejeződését. A wg.Add(n) metódus növeli a számlálót n-nel, míg a wg.Done() csökkenti 1-gyel. Ha a wg.Add hívások száma nem egyezik meg a futtatott goroutine-ok számával (azaz, a wg.Done hívásokkal), akkor:
- Ha a
wg.Addkevesebb, mint awg.Done, akkor awg.Donehívásakor a számláló negatívvá válhat, ami futásidejű pánikot (runtime panic) okoz. - Ha a
wg.Addtöbb, mint awg.Done, akkor awg.Wait()örökre blokkolni fog, mert a számláló nem ér el nullát — ez deadlock-hoz vezet.
Ezért fontos, hogy a goroutine-ok indítása előtt a wg.Add-t a megfelelő számmal hívjuk meg, és pontosan annyiszor hívjuk a wg.Done-t, ahányszor hozzáadtuk.