Sobes.tech
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.