记使用WaitGroup时的一个错误
发布时间:2020-12-16 18:42:08 所属栏目:大数据 来源:网络整理
导读:记使用WaitGroup时的一个错误 最近重构我之前写的服务器代码时,不当使用了WaitGroup,碰到了个错误,记录下. package mainimport ( "fmt" "sync" "time" )func main() { var wg sync .WaitGroup wg .Add ( 1 ) f1 := func() { time .Sleep (time .Second * 2
记使用WaitGroup时的一个错误最近重构我之前写的服务器代码时,不当使用了WaitGroup,碰到了个错误,记录下. package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
wg.Add(1)
f1 := func() {
time.Sleep(time.Second * 2)
fmt.Println("func()")
wg.Done()
}
go f1()
go f1()
go f1()
wg.Wait()
fmt.Println("Done")
}
/* D:test&;go run testwg2.go func() func() panic: sync: negative WaitGroup counter goroutine 22 [running]: runtime.panic(0x4a56e0,0xc082000250) c:/go/src/pkg/runtime/panic.c:279 +0x11f sync.(*WaitGroup).Add(0xc0820045e0,0xffffffffffffffff) c:/go/src/pkg/sync/waitgroup.go:64 +0x9a sync.(*WaitGroup).Done(0xc0820045e0) c:/go/src/pkg/sync/waitgroup.go:82 +0x37 main.func路001() D:/test/testwg2.go:17 +0xd2 created by main.main D:/test/testwg2.go:22 +0x9a */
出现的错误: panic: sync: negative WaitGroup counter 另一个错误: package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
wg.Add(10)
f1 := func() {
time.Sleep(time.Second * 2)
fmt.Println("func()")
wg.Done()
}
go f1()
go f1()
go f1()
wg.Wait()
fmt.Println("Done")
}
/*
D:test&;go run testwg2.go
func()
func()
func()
fatal error: all goroutines are asleep - deadlock!
goroutine 16 [semacquire]:
sync.runtime_Semacquire(0xc0820001bc)
c:/go/src/pkg/runtime/sema.goc:199 +0x37 sync.(*WaitGroup).Wait(0xc0820045e0) c:/go/src/pkg/sync/waitgroup.go:129 +0x152
main.main()
D:/test/testwg2.go:24 +0xaa
goroutine 19 [finalizer wait]:
runtime.park(0x414db0,0x55ec80,0x55d689)
c:/go/src/pkg/runtime/proc.c:1369 +0xac runtime.parkunlock(0x55ec80,0x55d689) c:/go/src/pkg/runtime/proc.c:1385 +0x42
runfinq()
c:/go/src/pkg/runtime/mgc0.c:2644 +0xdd runtime.goexit() c:/go/src/pkg/runtime/proc.c:1445
exit status 2
*/
其实这些错误主要是当时wg的add与done因为一些原因分开处理了。而 不过最近重构服务器蛮爽的,经过大遍大遍的清理代码,梳理流程后。 BLOG: blog.csdn.net/xcl168 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |