golang fatal error: all goroutines are asleep - deadlock!
来源:互联网 发布:免费淘宝网店模板 编辑:程序博客网 时间:2024/06/04 19:46
fatal error: all goroutines are asleep - deadlock!
这个错误的原因是:
在main goroutine线,期望从管道中获得一个数据,而这个数据必须是其他goroutine线放入管道的
但是其他goroutine线都已经执行完了(all goroutines are asleep),那么就永远不会有数据放入管道。
所以,main goroutine线在等一个永远不会来的数据,那整个程序就永远等下去了。
这显然是没有结果的,所以这个程序就说“算了吧,不坚持了,我自己自杀掉,报一个错给代码作者,我被deadlock了”
证明如下:
package mainimport ( "fmt" "time")func main() { c := make(chan int) go func() { for i := 0; i < 10; i++ { c <- i } }() hold(c)}func hold(c <-chan int) { for { time.Sleep(1 * time.Second) fmt.Println(<-c) } fmt.Println("hold on ...")}
hold方法中无线循环获取数据,显然循环10次,就没有数据可以取了,于是抛出fatal error
再看一段测试代码
package mainimport ( "fmt")func afuntion(ch chan int) { fmt.Println("finish") <-ch}func main() { ch := make(chan int) ch <- 1 go afuntion(ch)}
这段代码同样会造成死锁,原因是 channel没有缓冲,相当于channel一直都是满的,所以这里会发生阻塞。下面的goroutine还为创建,所以程序会在此一直阻塞,然后。。。就挂掉了。。。
上面代码稍微修改下,就可以正常运行,如下
package mainimport ( "fmt")func afuntion(ch chan int) { fmt.Println("finish") <-ch}func main() { ch := make(chan int) go afuntion(ch) ch <- 1}
解释:
1. 创建了一个无缓冲channel
2. 启动了一个goroutine,这个routine中对channel执行取出操作,但是因为这时候channel为空,所以这个取出操作发生阻塞,但是主routine可没有发生阻塞,程序继续运行
3. 往channel中放入了一个数据
4. 这时阻塞的那个routine检测到了channel中存在数据了,所以接触阻塞,从channel中取出数据,程序就此完毕
0 0
- golang fatal error: all goroutines are asleep - deadlock!
- golang报错: all goroutines are asleep
- Golang--Goroutines
- shopex错误Fatal error: All…
- YumRepo Error: All mirror URLs are not using问题解决
- error C2601: ' ": local function definitions are illegal;fatal error C1075: end of file found before
- golang error
- golang map引发的 【fatal error: concurrent map read and map write】问题解决
- fatal error: invalid virtual filesystem overlay file '/[Path]/all-product-headers.yaml
- log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
- log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
- YumRepo Error: All mirror URLs are not using ftp, http[s] or file. Eg. </HTML>/
- sh ndk-build all ERROR: You are using a non-Cygwin compatible Make program.
- ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: All directories in dfs.data.dir are invalid
- 关于YumRepo Error: All mirror URLs are not using ftp......报错的解决方法
- Deadlock
- deadlock
- Deadlock
- PHP初学之控制结构
- 企业发布设置下载链接与plist文件
- The Swift Programming Language学习笔记(九)——枚举
- #pragma once与 #ifndef的区别
- The Swift Programming Language学习笔记(十)——类和结构体
- golang fatal error: all goroutines are asleep - deadlock!
- 高德地图定位源码
- java反射机制调用私有方法
- C语言ini形式配置文件解析库——iniparser
- 微信接入验证Nodejs版例子程序
- 微信接入验证Nodejs版例子程序
- The Swift Programming Language学习笔记(十一)——属性
- https访问需要ssl证书
- WebSocket 是什么原理?为什么可以实现持久连接?