Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 有没有更好的方法来阻止围棋中的无限戈罗廷?_Go_Goroutine - Fatal编程技术网

Go 有没有更好的方法来阻止围棋中的无限戈罗廷?

Go 有没有更好的方法来阻止围棋中的无限戈罗廷?,go,goroutine,Go,Goroutine,我使用goroutines制作了一个简单的时钟信号: func clockloop(ch chan byte) { count := 0 for { time.Sleep(FRAMELEN) count++ innerfor: for count { select { case ch <- 1: count--

我使用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
}
func时钟循环(ch chan字节){
计数:=0
为了{
时间。睡眠(FRAMELEN)
计数++
innerfor:
算数{
挑选{

case ch一个停止通道是一个很好的方法。一个goroutine必须停止自己。没有办法从外部杀死一个goroutine

作为参考,Ian说了这一点,Russ补充道,“杀死单独的Goroutine是一件非常不稳定的事情: 不可能知道这些锁或其他资源是什么 goroutines有一个仍然需要清理的地方 程序继续平稳运行。”

另请参见