Sobes.tech
Junior — Middle

Jakie będą konsekwencje, jeśli liczba wywołań wg.Add nie będzie odpowiadać liczbie uruchomionych gorutyn?

sobes.tech AI

Odpowiedź od AI

W Go, sync.WaitGroup służy do oczekiwania na zakończenie zestawu gorutyn. Metoda wg.Add(n) zwiększa licznik o n, a wg.Done() zmniejsza go o 1. Jeśli liczba wywołań wg.Add nie odpowiada liczbie uruchomionych gorutyn (czyli wywołaniom wg.Done), to:

  • Jeśli wg.Add jest mniejsze niż liczba wg.Done, to przy wywołaniu wg.Done licznik może stać się ujemny, co spowoduje panic (błąd wykonania).
  • Jeśli wg.Add jest większe niż liczba wg.Done, wywołanie wg.Wait() będzie blokować się na zawsze, ponieważ licznik nie osiągnie zera — co doprowadzi do deadlocka.

Dlatego ważne jest, aby wywołać wg.Add z odpowiednią liczbą przed uruchomieniem gorutyn i wywołać wg.Done dokładnie tyle razy, ile zostało dodane.