gpt4 book ai didi

go - 有没有更好的方法来停止 Go 中的无限 goroutine?

转载 作者:IT王子 更新时间:2023-10-29 00:51:42 27 4
gpt4 key购买 nike

我使用 goroutines 制作了一个简单的时钟信号:

func clockloop(ch chan byte) {
count := 0
for {
time.Sleep(FRAMELEN)
count++
innerfor:
for count {
select {
case ch <- 1:
count--
default:
break innerfor
}
}
}
}

func MakeClock() chan byte {
clock := make(chan byte)
go clockloop(clock)
return clock
}

我知道这个时钟不精确,但这无关紧要。我想知道停止这个 goroutine 的最好方法是什么?

理想情况下,我希望它在 channel 的任何监听器超出范围时立即停止,但我确实知道该怎么做(很像垃圾收集器,但用于 goroutines)。我想出了两种手动停止它的方法:(1)使用全局停止变量,所有此类 goroutine 都会检查每个循环,以及(2)使用停止 channel 。其中每一个的缺点是我必须手动停止 goroutines。

最佳答案

停止 channel 是一个很好的方法。 goroutine 必须自行停止。没有办法从外部杀死一个。

作为引用,有 this thread在 Go-Nuts 上,Ian 基本上是这样说的,Russ 补充说,“杀死单个 goroutines 是一件非常不稳定的事情:不可能知道那些是什么锁或其他资源goroutines 仍然需要清理程序继续顺利运行。”

关于go - 有没有更好的方法来停止 Go 中的无限 goroutine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11123065/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com