Golang channel 死锁的几种情况以及例子
死锁是指两个或两个以上的协程的执行过程中,由于竞争资源或由于彼此通信而造成的一种阻塞的现象,若无外力作用,他们将无法推进下去,以下是总结出来的几种死锁情况。
1.死锁1:一个通道在一个主go程里同时进行读和写
2.死锁2:go程开启之前使用通道
3.死锁3 :通道1中调用了通道2,通道2中调用通道1
4.死锁4:直接读取空channel的死锁
5.死锁5:超过channel缓存继续写入数据导致死锁
6.向已关闭的channel中写入数据不会导致死锁,但是回出发panic异常
// 死锁1:一个通道在一个主go程里同时进行读和写
func main() {
// 死锁1
ch := make(chan int)
ch <- 100
num := <-ch
fmt.Println("num=", num)
}
// 死锁2:go程开启之前使用通道
func main() {
ch := make(chan i