func testDeadLock(c chan int) {
for {
fmt.Println(<-c)
}
}
func main() {
c := make(chan int)
c <- 'A'
go testDeadLock(c)
time.Sleep(time.Millisecond)
}
上面的代码会产生fatal error: all goroutines are asleep - deadlock!的错误提示
func testDeadLock(c chan int) {
for {
fmt.Println(<-c)
}
}
func main() {
c := make(chan int)
go testDeadLock(c)
c <- 'A'
time.Sleep(time.Millisecond)
}
而这份代码则会正常的输出65,造成上面不同的原因是我们声明了一个无缓冲的channel,所以当对这个channel写的时候,会一直阻塞等到某个协程对这个channel读,但是我们的程序在写的时候就阻塞了不会执行到下面的读操作,于是程序发生了死锁。