我正在創(chuàng)建這個(gè)函數(shù)來測(cè)試創(chuàng)建和停止計(jì)時(shí)器。運(yùn)行時(shí)出現(xiàn)死鎖錯(cuò)誤:package mainimport "fmt"import "time"func main() { livenessTimer := &time.Timer{} livenessInterval, _ := time.ParseDuration("1m") for { fmt.Print("Timer started") livenessTimer = time.NewTimer(livenessInterval) select { case <-livenessTimer.C: fmt.Print(time.Now()) fmt.Println("timer triggered") } if !livenessTimer.Stop() { // drain timer from channel if any fmt.Println("drain timer") <-livenessTimer.C } }}當(dāng)我運(yùn)行此代碼時(shí),我收到此錯(cuò)誤:Timer started2009-11-10 23:01:00 +0000 UTC m=+60.000000001timer triggereddrain timerfatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive]:main.main() /tmp/sandbox748850751/prog.go:21 +0x2e0Stop建議檢查返回值并排空通道的文檔。
1 回答

holdtom
TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
這是文檔中的關(guān)鍵部分:
...假設(shè)程序尚未從 tC 收到
在您的情況下,計(jì)時(shí)器已經(jīng)觸發(fā),Stop
返回 false,并且您開始在沒有其他 goroutine 運(yùn)行的通道上等待,因此出現(xiàn)死鎖。
- 1 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)
0/150
提交
取消