当前位置: > > > > 为什么计时器 Stop 会出现死锁错误?
为什么计时器 Stop 会出现死锁错误?
来源:stackoverflow
2024-05-01 12:48:38
0浏览
收藏
哈喽!今天心血来潮给大家带来了《为什么计时器 Stop 会出现死锁错误?》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!
问题内容
我正在创建这个函数来测试创建和停止计时器。运行时出现死锁错误:
package main
import "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 triggered
drain timer
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
/tmp/sandbox748850751/prog.go:21 +0x2e0
stop 的文档建议检查返回值并排空通道。
解决方案
这是文档中的关键部分:
…假设程序尚未收到来自 t.C 的信息
在您的情况下,计时器已经触发,Stop 返回 false,并且您开始等待没有其他 goroutine 运行的通道,因此死锁。
以上就是《为什么计时器 Stop 会出现死锁错误?》的详细内容,更多关于的资料请关注米云公众号!
