环境:OS X 10.8,Go 1.0.2
我创建了一个缓冲区大小为 2 的通道,然后如果我写通道 3 次,它会抛出错误:
throw:所有的 goroutine 都睡着了——死锁!
当然,这是正确的。
但是如果我在 goroutines 中写了四次或更多次通道,它工作正常,为什么?通道的容量是 2,为什么 goroutine 会忽略或忘记容量设置?我注释了读取通道代码,因此没有人会读取通道并节省容量。我也使用 time.Sleep 来等待所有 goroutine 完成它们的工作。
请查看以下代码: package main
//import "fmt"
func main() {
c := make(chan int, 2)
/*c <- 1
c <- 2
c <- 3*/
for i:=0; i<4; i++ {
go func(i int) {
c <- i
c <- 9
c <- 9
c <- 9
}(i)
}
time.Sleep(2000 * time.Millisecond)
/*for i:=0; i<4*2; i++ {
fmt.Println(<-c)
}*/
}
有人可以给一些点击吗?谢谢你们。
斯蒂芬大帝
手掌心
相关分类