Junior — Middle
Welche Folgen hat es, wenn die Anzahl der Aufrufe von wg.Add nicht mit der Anzahl der laufenden Goroutines übereinstimmt?
sobes.tech KI
Antwort von AI
In Go wird sync.WaitGroup verwendet, um auf das Beenden einer Gruppe von Goroutinen zu warten. Die Methode wg.Add(n) erhöht den Zähler um n, und wg.Done() verringert ihn um 1. Wenn die Anzahl der Aufrufe von wg.Add nicht mit der Anzahl der gestarteten Goroutinen (also den Aufrufen von wg.Done) übereinstimmt, dann:
- Wenn
wg.Addkleiner ist als die Anzahl vonwg.Done, kann der Zähler beim Aufruf vonwg.Donenegativ werden, was zu einem Laufzeitfehler (panic) führt. - Wenn
wg.Addgrößer ist als die Anzahl vonwg.Done, wirdwg.Wait()für immer blockieren, da der Zähler nie null erreicht — dies führt zu einem Deadlock.
Daher ist es wichtig, wg.Add mit der richtigen Zahl aufzurufen, bevor die Goroutinen gestartet werden, und wg.Done genau so oft aufzurufen, wie hinzugefügt wurde.