为什么我在尝试从一个从不在 goroutine 中接收数据但在 main func 中接收数据的通道中读取时不会出现死锁
Why do I not get a deadlock when trying to read from a channel that never receives data in a goroutine but do in the main func
为什么这里会出现死锁
c := make(chan bool)
fmt.Println(<-c)
fmt.Println("done")
这里没有
c := make(chan bool)
go func() {
fmt.Println(<-c)
}()
fmt.Println("done")
我原以为这两种情况都会出现死锁,因为两者都试图从一个永远不会接收数据的通道中读取数据。
子goroutine被阻塞,但是当前goroutine可以继续执行。
只有当所有个goroutines同时被阻塞时才会出现死锁。
为什么这里会出现死锁
c := make(chan bool)
fmt.Println(<-c)
fmt.Println("done")
这里没有
c := make(chan bool)
go func() {
fmt.Println(<-c)
}()
fmt.Println("done")
我原以为这两种情况都会出现死锁,因为两者都试图从一个永远不会接收数据的通道中读取数据。
子goroutine被阻塞,但是当前goroutine可以继续执行。
只有当所有个goroutines同时被阻塞时才会出现死锁。