Intern
Эгер sync.WaitGroup эсептегичи, Add салыштарынан көп Done чакыруларынан улам терс болуп калса, эмне болот?
sobes.tech AI
AIден жооп
Эгерде sync.WaitGroup саноочу Goда терс мааниге өтсө, андан кийин Done() чакыруулары Add() көбүрөөк болсо, иштөө учурунда panic (паника) пайда болот.
WaitGroup күтүлүп жаткан goroutineдердин санын эсептегич аркылуу көзөмөлдөйт. Add(n) чакырганда, эсептегич nге өсөт, ал эми Done() — 1ге азайтат. Эсептегич нөлдөн төмөндөсө, бул колдонуу ката деп эсептелет.
Ката мисалы:
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // кошумча чакыруу, panicке алып келет
Паника төмөнкү билдирүү менен пайда болот:
panic: sync: negative WaitGroup counter
Ошондуктан, бул ката алдын алуу үчүн, Add жана Done ортосунда катуу баланс сактоо маанилүү.