3
我做的goroutine使用一個簡單的時鐘信號:有沒有更好的方法來阻止Go中的無限goroutine?
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的最好方法?
理想情況下,只要任何聽衆通道超出範圍,我就會喜歡它,但我確實知道如何做到這一點(非常像垃圾收集器,但適用於goroutines)。我已經想出了兩種方法來手動停止它:(1)使用全局停止變量,所有這些goroutine將檢查每個循環,(2)使用停止通道。每個這些的缺點是我必須手動停止goroutines。
參見http://stackoverflow.com/questions/6807590/how-to-stop-a-goroutine – Sonia