Sobes.tech
Junior — Middle

wg.Add chaqiriqlari soni ishga tushirilgan gorutinlar soniga mos kelmasa, qanday natijalar yuzaga keladi?

sobes.tech AI

AIdan javob

Go tilida, sync.WaitGroup bir guruh goroutinlarning yakunlanishini kutish uchun ishlatiladi. wg.Add(n) usuli hisoblagichni n ga oshiradi, wg.Done() esa uni 1 ga kamaytiradi. Agar wg.Add chaqiruvlarining soni ishga tushirilgan goroutinlar soniga (ya'ni, wg.Done chaqiruvlariga) mos kelmasa,:

  • Agar wg.Add wg.Done sonidan kam bo'lsa, wg.Done chaqirilganda hisoblagich manfiy bo'lishi mumkin, bu esa runtime panic ga olib keladi.
  • Agar wg.Add wg.Done sonidan ko'p bo'lsa, wg.Wait() doim bloklanib qoladi, chunki hisoblagich nolinmaydi — bu deadlock ga olib keladi.

Shuning uchun, goroutinlarni ishga tushirishdan oldin wg.Add ni to'g'ri son bilan chaqirish va wg.Done ni aniq qo'shilgan sonicha chaqirish muhimdir.