go deadlock

vipally · · 1591 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

原文地址:go deadlock作者:funkygao
  1 package main
 
  3 func main() {
  4     ch:= make(chan int)
  5     ch<- 5
  6    <- ch
  7 }  

上面的代码,在执行时会报:
throw: all goroutines are asleep - deadlock!

原因是:
ch <- 5,是unbufferedchannel,它会block,直到有人把它发送的消息取走。因此,第6行的语句永远无法执行,造成死锁

go判断死锁的代码位于:
src/pkg/runtime/proc.c


解决办法有2:
1. 把第4行修改为:
ch := make(chan int, 1) // buffered channel

2. 创建新的goroutine来执行
 1 package main
 
  3 func main() {
  4     ch:= make(chan int)
  5     gofunc() {
  6        ch <- 5
  7    }()
  8    <- ch
  9 }


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:vipally

查看原文:go deadlock

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1591 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传