golang的deadlock成因

golang的deadlock成因,第1张

概述如果你接触通道,你必然会遇到:fatal error: all goroutines are asleep - deadlock! 下面我们来还原一下错误 func main() { ch:=make(chan int,2) ch<-1 ch<-2 ch<-3} 错误抛出来了,下面我修改一下代码即可解决问题。 ch:=make(chan i 如果你接触通道,你必然会遇到: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死锁,所以需要放到协程处理才行。

总结

以上是内存溢出为你收集整理的golang的deadlock成因全部内容,希望文章能够帮你解决golang的deadlock成因所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1282331.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存