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.Addon väiksem kuiwg.Done, siiswg.Done-i kutsumisel võib loendur muutuda negatiivseks, mis põhjustab runtime panic-i. - Kui
wg.Addon suurem kuiwg.Done, siiswg.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.