golang的deadlock成因

前端之家收集整理的这篇文章主要介绍了golang的deadlock成因前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果你接触通道,你必然会遇到:fatal error: all goroutines are asleep - deadlock!

下面我们来还原一下错误

func main() {
	ch:=make(chan int,2)
        ch<-1
        ch<-2
        ch<-3
}

错误抛出来了,下面我修改一下代码即可解决问题。

ch:=make(chan int,2)
go func() {
    ch<-1
    ch<-2
    ch<-3
}()

why?

因为:chan无缓存时,如果send值则阻塞,chan如果设定缓存大小,则send超过时则阻塞。

阻塞如果放到主进程时则提示deallock死锁,所以需要放到协程处理才行。

原文链接:https://www.f2er.com/go/189361.html

猜你在找的Go相关文章