Sobes.tech
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.Add ir mazāk nekā wg.Done, tad, izsaucot wg.Done, skaitītājs var kļūt negatīvs, kas izraisīs runtime panic.
  • Ja wg.Add ir lielāks par wg.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.