加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang的deadlock成因

发布时间:2020-12-16 18:26:40 所属栏目:大数据 来源:网络整理
导读:如果你接触通道,你必然会遇到: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
如果你接触通道,你必然会遇到: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死锁,所以需要放到协程处理才行。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读