第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么在 go test 中使用 WaitGroup.Wait() 會(huì)掛起?

為什么在 go test 中使用 WaitGroup.Wait() 會(huì)掛起?

Go
皈依舞 2022-11-28 14:36:54
這是我的意思的一個(gè)簡(jiǎn)單例子package mainimport (    "sync"    "testing"    "time")func TestWaitGroup(t *testing.T) {    var wg sync.WaitGroup    quitSig := make(chan struct{})    go func(wg sync.WaitGroup, quitChan, chan struct{}) {        defer func() {            t.Log("Done...")            wg.Done()            t.Log("Done!")        }()        t.Log("waiting for quit channel signal...")        <-quitChan        t.Log("signal received")    }(wg, quitSig)    time.Sleep(5*time.Second)    t.Log("Done sleeping")    close(quitSig)    t.Log("closed quit signal channel")    wg.Wait()    t.Log("goroutine shutdown")}當(dāng)我運(yùn)行它時(shí),我得到以下信息=== RUN   TestWaitGroup    main.go:18: waiting for quit channel signal...    main.go:23: Done sleeping    main.go:25: closed quit signal channel    main.go:20: signal received    main.go:14: Done...    main.go:16: Done!    它只是掛起直到超時(shí)。如果你只是做defer wg.Done()同樣的行為觀察。我在跑go1.18。這是一個(gè)錯(cuò)誤還是我在這種情況下沒(méi)有正確使用 WaitGroups?
查看完整描述

2 回答

?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

兩個(gè)問(wèn)題:

  • 不要復(fù)制sync.WaitGroup:來(lái)自文檔

    • A WaitGroup must not be copied after first use.

  • 在開(kāi)始你的工作之前你需要一個(gè)wg.Add(1)- 與wg.Done()


wg.Add(1) // <- add this


go func (wg *sync.WaitGroup ...) { // <- pointer

}(&wg, quitSig) // <- pointer to avoid WaitGroup copy

https://go.dev/play/p/UmeI3TdGvhg


查看完整回答
反對(duì) 回復(fù) 2022-11-28
?
翻閱古今

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊

您正在傳遞等待組的副本,因此 goroutine 不會(huì)影響在外部范圍內(nèi)聲明的等待組。通過(guò)以下方式修復(fù)它:


    go func(wg *sync.WaitGroup, quitChan, chan struct{}) {

     ...

    }(&wg, quitSig)


查看完整回答
反對(duì) 回復(fù) 2022-11-28
  • 2 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)