Junior — Middle
Какви последствия ще настъпят, ако броят на извикванията wg.Add не съответства на броя на стартираните горутини?
sobes.tech AI
Отговор от AI
В Go sync.WaitGroup се използва за изчакване завършването на набор от горутини. Методът wg.Add(n) увеличава брояча с n, а wg.Done() го намалява с 1. Ако броят на извикванията на wg.Add не съвпада с броя на стартираните горутини (т.е. извикванията на wg.Done), тогава:
- Ако
wg.Addе по-малко от броя наwg.Done, при извикване наwg.Doneброячът може да стане отрицателен, което ще доведе до паника (runtime panic). - Ако
wg.Addе по-голямо от броя наwg.Done, извикването наwg.Wait()ще блокира завинаги, тъй като броячът няма да достигне нула — това ще доведе до deadlock.
Затова е важно да се извика wg.Add с правилното число преди стартирането на горутините и да се извика wg.Done точно толкова пъти, колкото е добавено.