golang panic: sync: negative WaitGroup counter 报错
这个错误是由于在使用 sync.WaitGroup 时,调用了过多的 Done() 方法,导致 WaitGroup 计数器变成负数,从而触发 panic。
一般来说,这个错误会在以下两种情况下出现:
-
Done() 方法被多次调用。
-
Wait() 方法被多次调用。
为了避免这个错误,我们需要确保在调用 Done() 方法或 Wait() 方法之前,计数器的值不为零。如果计数器的值为零,则不应该再调用 Done() 方法。同样地,如果计数器的值为负数,则不应该再调用 Wait() 方法。
以下是一个示例程序,演示了如何避免这个错误:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
// do something
wg.Done()
}()
}
wg.Wait()
fmt.Println("All goroutines have finished.")
}
在这个示例中,我们首先使用 Add() 方法将计数器增加到 10。然后,我们启动 10 个 goroutine,每个 goroutine 执行一些任务,并在完成后调用 Done() 方法。最后,我们使用 Wait() 方法等待所有 goroutine 完成。由于我们正确地使用了 Add()、Done() 和 Wait() 方法,因此程序不会出现 sync: negative WaitGroup counter 错误。
原文地址: https://www.cveoy.top/t/topic/ufq 著作权归作者所有。请勿转载和采集!