日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记使用WaitGroup时的一个错误

發布時間:2025/3/14 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记使用WaitGroup时的一个错误 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

記使用WaitGroup時的一個錯誤

近期重構我之前寫的server代碼時,不當使用了WaitGroup,碰到了個錯誤,記錄下.

package mainimport ("fmt""sync""time" )func main() {var wg sync.WaitGroupwg.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 countergoroutine 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.mainD:/test/testwg2.go:22 +0x9a*/

出現的錯誤: panic: sync: negative WaitGroup counter
關于這個錯誤, stackoverflow有個相關問題的鏈接.

還有一個錯誤:

package mainimport ("fmt""sync""time" )func main() {var wg sync.WaitGroupwg.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 +0xaagoroutine 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由于一些原因分開處理了。


中間由于穿插了一大堆處理。一直done造成wg負數了,如例1,或者add
與done造成了deadlock。


以后實際處理中要注意下。盡量降低中間處理。把這樣的需相應的簡潔化處理.

只是近期重構server蠻爽的。經過大遍大遍的清理代碼,梳理流程后。


代碼看著順眼了非常多。

只是還是任重而道遠。

BLOG: blog.csdn.net/xcl168

轉載于:https://www.cnblogs.com/wzzkaifa/p/7199952.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的记使用WaitGroup时的一个错误的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。