0
我有一个列表,其中包含一个函数,它包含pop元素,另一个函数用于“接收”弹出的元素。我认为在接收机关闭后才能关闭该频道,但似乎该节目在到达之前就陷入僵局。这是做这件事的最好方法?我应该有另一个通道来检测流行音乐何时完成吗?即使通道已关闭,程序也会死锁
func pop(list *[]int, c chan int) {
if len(*list) != 0 {
result := (*list)[0]
*list = (*list)[1:]
fmt.Println("about to send ", result)
c <- result
} else {
return
}
}
func receiver(c chan int) {
result := <-c
fmt.Println("received ", result)
}
var list = []int{1, 2, 3}
func main() {
fmt.Println("Main")
c := make(chan int)
go pop(&list, c)
go pop(&list, c)
for len(list) > 0 {
receiver(c)
}
close(c) //Dosen't seem to have any effect
fmt.Println("done")
}
请在代码上运行'go fmt' - 这样我们就可以更轻松地阅读它。如果您发布了一个完整的工作示例,我们甚至可以将其复制并粘贴到我们的编辑器中并与之一起玩。 – topskip 2014-09-19 12:49:57
对不起,上次有人编辑我的代码,只留下了功能。我会添加一个链接到操场 – meto 2014-09-19 14:46:15