Intern
Kas notiks, ja sync.WaitGroup skaitītājs kļūst negatīvs, jo Done izsaukumi ir vairāk nekā Add?
sobes.tech AI
Atbilde no AI
Ja sync.WaitGroup skaitītājs Go valodā kļūst negatīvs tāpēc, ka Done() izsaukumi ir vairāk nekā Add(), tad izpildes laikā notiks panika (panic).
WaitGroup seko gaidāmo gorutīnu skaitam, izmantojot skaitītāju. Izsaucot Add(n), skaitītājs palielinās par n, bet ar Done() — samazinās par 1. Ja skaitītājs kļūst mazāks par nulli, tas tiek uzskatīts par lietošanas kļūdu.
Kļūdas piemērs:
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // papildu izsaukums, izraisīs panic
Panika parādās ar ziņojumu:
panic: sync: negative WaitGroup counter
Tādēļ ir svarīgi stingri uzturēt līdzsvaru starp Add un Done, lai izvairītos no šīs kļūdas.