Intern
Какво ще се случи, ако броячът на sync.WaitGroup стане отрицателен поради допълнителни извиквания на Done в сравнение с Add?
sobes.tech AI
Отговор от AI
Ако броячът на sync.WaitGroup в Go стане отрицателен поради това, че извикванията на Done() са повече от Add(), по време на изпълнение ще настъпи паника (panic).
WaitGroup следи броя на очакваните горутини чрез брояч. При извикване на Add(n), броячът се увеличава с n, а при Done() — намалява с 1. Ако броячът стане по-малък от нула, това се счита за грешка при използването.
Пример за грешка:
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // допълнително извикване, ще доведе до panic
Паникът възниква с съобщение:
panic: sync: negative WaitGroup counter
Затова е важно да се поддържа строга баланс между Add и Done, за да се избегне тази грешка.