Sobes.tech
Junior — Middle

Ce consecințe vor apărea dacă numărul apelurilor la wg.Add nu corespunde numărului de goroutines în execuție?

sobes.tech AI

Răspuns de la AI

În Go, sync.WaitGroup este folosit pentru a aștepta finalizarea unui set de goroutines. Metoda wg.Add(n) crește contorul cu n, iar wg.Done() îl scade cu 1. Dacă numărul de apeluri la wg.Add nu corespunde cu numărul de goroutines lansate (adică, apelurile la wg.Done), atunci:

  • Dacă wg.Add este mai mic decât numărul de wg.Done, atunci la apelarea wg.Done, contorul poate deveni negativ, ceea ce va duce la o panică (eroare de execuție).
  • Dacă wg.Add este mai mare decât numărul de wg.Done, apelul wg.Wait() se va bloca pentru totdeauna, deoarece contorul nu va ajunge la zero — ceea ce va duce la un deadlock.

De aceea, este important să apelați wg.Add cu numărul corect înainte de a porni goroutines și să apelați wg.Done exact de atâtea ori câte s-au adăugat.