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.Addjest mniejsze niż liczbawg.Done, to przy wywołaniuwg.Donelicznik może stać się ujemny, co spowoduje panic (błąd wykonania). - Jeśli
wg.Addjest większe niż liczbawg.Done, wywołaniewg.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.