环境:OS X 10.8,Go 1.0.2
我创建了一个缓冲区大小为 2 的通道,然后如果我写入通道 3 次,它会抛出错误:
throw:所有的 goroutine 都处于休眠状态——死锁!
当然,这是正确的。
但是如果我在 goroutines 中写了四次或更多次通道,它工作正常,为什么?通道的容量是 2,为什么 goroutines 忽略了或者忘记了容量设置?我注释了读取通道代码,因此没有人会读取通道并节省容量。我也使用 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)
}*/
}
有人可以打一些吗?多谢你们。