Sobes.tech
Junior — Middle

Koje posledice će nastati ako broj poziva wg.Add ne odgovara broju pokrenutih gorutina?

sobes.tech АИ

Одговор од АИ

U Go, sync.WaitGroup se koristi za čekanje završetka skupa gorutina. Metoda wg.Add(n) povećava brojač za n, a wg.Done() ga smanjuje za 1. Ako broj poziva wg.Add ne odgovara broju pokrenutih gorutina (tj. pozivima wg.Done), onda:

  • Ako je wg.Add manji od broja wg.Done, pri pozivu wg.Done brojač može postati negativan, što će izazvati paniku (runtime panic).
  • Ako je wg.Add veći od broja wg.Done, poziv wg.Wait() će zauvek blokirati, jer brojač neće dostići nulu — što će dovesti do deadlock-a.

Zato je važno pozvati wg.Add sa pravim brojem pre pokretanja gorutina i pozvati wg.Done tačno onoliko puta koliko je dodato.