Junior — Middle
Агар шумораи даъватҳои wg.Add бо шумораи goroutineҳои дар ҳолати иҷро набошанд, чӣ оқибатҳо ба вуҷуд меоянд?
sobes.tech AI
Ҷавоб аз AI
Дар Go, sync.WaitGroup барои интизор шудан ба анҷоми гурӯҳи goroutine-ҳо истифода мешавад. Метод wg.Add(n) ҳисобиро ба n меафзояд, ва wg.Done() онро кам мекунад. Агар шумораи даъватҳои wg.Add бо шумораи goroutine-ҳои оғозшуда (яъне, даъватҳои wg.Done) мувофиқат накунад, пас:
- Агар
wg.Addкамтар азwg.Doneбошад, дар вақти даъватиwg.Done, ҳисобкунанда метавонад манфӣ шавад, ки ба паникаи иҷроӣ (runtime panic) оварда мерасонад. - Агар
wg.Addбештар азwg.Doneбошад, даъватиwg.Wait()барои ҳамеша монд, зеро ҳисобкунанда ба сифр намерасад — ин ба deadlock оварда мерасонад.
Аз ин рӯ, муҳим аст, ки пеш аз оғоз кардани goroutine-ҳо wg.Add бо шумораи дуруст даъват шавад ва wg.Done ҳамон қадар даъват карда шавад, ки илова шудааст.