Sobes.tech
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.Add kevesebb, mint a wg.Done, akkor a wg.Done hívásakor a számláló negatívvá válhat, ami futásidejű pánikot (runtime panic) okoz.
  • Ha a wg.Add több, mint a wg.Done, akkor a wg.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.