Sobes.tech
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 точно толкова пъти, колкото е добавено.