Sobes.tech
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 ҳамон қадар даъват карда шавад, ки илова шудааст.