Sobes.tech
Junior — Middle

Millised tagajärjed võivad tekkida, kui wg.Add kõnede arv ei vasta käivitatud gorutinide arvule?

sobes.tech AI

Vastus AI-lt

Go keeles sync.WaitGroup kasutatakse selleks, et oodata, kuni teatud arv goroutine'eid lõpetab. Meetod wg.Add(n) suurendab loendurit n võrra, ja wg.Done() vähendab seda 1 võrra. Kui wg.Add-i kutsutud arv ei vasta käivitatud goroutine'ide arvule (st wg.Done-i kutsumistele), siis:

  • Kui wg.Add on väiksem kui wg.Done, siis wg.Done-i kutsumisel võib loendur muutuda negatiivseks, mis põhjustab runtime panic-i.
  • Kui wg.Add on suurem kui wg.Done, siis wg.Wait() jääb igaveseks blokeeruma, kuna loendur ei jõua nullini — see viib deadlock-i.

Seetõttu on oluline enne goroutine'ide käivitamist kutsuda wg.Add õige arvuga ning täpselt sama palju wg.Done-i kutsuda, kui palju on lisatud.