我正在创建这个函数来测试创建和停止计时器。运行时出现死锁错误: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 } }}当我运行此代码时,我收到此错误: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贡献1805条经验 获得超10个赞
这是文档中的关键部分:
...假设程序尚未从 tC 收到
在您的情况下,计时器已经触发,Stop
返回 false,并且您开始在没有其他 goroutine 运行的通道上等待,因此出现死锁。
- 1 回答
- 0 关注
- 136 浏览
添加回答
举报
0/150
提交
取消