Intern
Co się stanie, jeśli licznik sync.WaitGroup stanie się ujemny z powodu dodatkowych wywołań Done w porównaniu do Add?
sobes.tech AI
Odpowiedź od AI
Jeśli licznik sync.WaitGroup w Go stanie się ujemny z powodu większej liczby wywołań Done() niż Add(), w czasie działania wystąpi panic.
WaitGroup śledzi liczbę oczekujących gorutyn za pomocą licznika. Wywołanie Add(n) zwiększa licznik o n, a Done() — zmniejsza go o 1. Jeśli licznik spadnie poniżej zera, jest to uważane za błąd użytkowania.
Przykład błędu:
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // dodatkowe wywołanie, spowoduje panic
Panic pojawia się z komunikatem:
panic: sync: negative WaitGroup counter
Dlatego ważne jest, aby ściśle zachować równowagę między Add a Done, aby uniknąć tego błędu.