Junior — Middle
Kādas sekas var rasties, ja wg.Add izsaukumu skaits neatbilst palaisto gorutinu skaitam?
sobes.tech AI
Atbilde no AI
Go valodā sync.WaitGroup tiek izmantots, lai gaidītu, kamēr pabeigsies gorutīnas. Metode wg.Add(n) palielina skaitītāju par n, bet wg.Done() to samazina par 1. Ja wg.Add izsaukumu skaits neatbilst palaistu gorutīnu skaitam (t.i., wg.Done izsaukumiem), tad:
- Ja
wg.Addir mazāk nekāwg.Done, tad, izsaucotwg.Done, skaitītājs var kļūt negatīvs, kas izraisīs runtime panic. - Ja
wg.Addir lielāks parwg.Done,wg.Wait()darbosies mūžīgi, jo skaitītājs nesasniegs nulli — tas novedīs pie deadlock.
Tādēļ ir svarīgi pirms gorutīnu palaišanas izsaukt wg.Add ar pareizo skaitu un wg.Done izsaukt tieši tik daudz reižu, cik tika pievienots.