package main
import (
"fmt"
"time"
)
func main() {
c := make(chan int)
go func() {
fmt.Println("hello")
c <- 10
}()
time.Sleep(2 * time.Second)
}
在上面的程序中,我创建了一个向通道c写入的围棋例程,但没有其他围棋例程从通道中读取。为什么在这种情况下没有出现死锁?
僵局意味着所有的goroutine都被阻断,而不仅仅是您任意选择的一个goroutine。
僵局是指所有的goroutine都被阻塞,而不仅仅是你选择的一个任意goroutine。main
goroutine只是处于睡眠状态,一旦睡眠结束,它就可以继续运行。
如果你把 sleep
附带 select{}
阻止永远的操作,你会得到你的僵局。
c := make(chan int)
go func() {
fmt.Println("hello")
c <- 10
}()
select {}
试试吧 去游乐场.
请看相关内容。为什么没有接收机被屏蔽的错误?