问答

golang 在这段代码中未检测到deadlock

作者:admin 2021-07-31 我要评论

RT, 通常情况下,你在main函数写如下代码执行会: fatal error: all goroutines are asleep - deadlock! func main() { //doen := make(chan bool) var s chan boo...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

RT, 通常情况下,你在main函数写如下代码执行会:
fatal error: all goroutines are asleep - deadlock!

func main() {
    //doen := make(chan bool)
    var s chan bool
    s <- false
}

但是我在main中,这么写却一直block, 和上面场景唯一不同的是,我还有很多代码在别的包里.

可以解释下这是为什么吗?

###
fatal error: all goroutines are asleep - deadlock!

我还有很多代码在别的包里.

只要有一个 goroutine 还在跑就不会报啊 ...

###

楼主需要明白两点:

  1. channel 是引用类型,通过 var 声明的 channel 初始值为 nil,通常情况下应该通过 make 去申请内存。
  2. 如 @fefe 所说,死锁只有在所有的 goroutine 都处于等待状态时才会发生,楼主的程序应该还有其他的 goroutine 在运行,如果自己的代码中没有开启其他 goroutine,那就有可能是项目依赖开启的 goroutine。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • golang 在这段代码中未检测到deadlock

    golang 在这段代码中未检测到deadlock

  • python怎么清理数据?怎么进行标准格式

    python怎么清理数据?怎么进行标准格式

  • 如何在树莓派4B上通过docker安装Flink

    如何在树莓派4B上通过docker安装Flink

  • nginx与redis的epoll是边缘触发还是水

    nginx与redis的epoll是边缘触发还是水

腾讯云代理商
海外云服务器