Sobes.tech
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 ортосунда катуу баланс сактоо маанилүү.