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死锁,所以需要放到协程处理才行。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |