登录
首页 >  Golang >  Go问答

Go 通道死锁没有发生

来源:Golang技术栈

时间:2023-03-04 09:19:22 179浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《Go 通道死锁没有发生》,这篇文章主要会讲到golang等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

package main
import (
    "fmt"
    "time"
)

func main() {
    c := make(chan int)

    go func() {
        fmt.Println("hello")
        c 

在上面的程序中,我创建了一个正在写入通道 c 的 Go 例程,但没有其他从通道读取的 Go 例程。为什么在这种情况下没有死锁?

正确答案

死锁意味着所有 goroutine 都被阻塞,而不仅仅是您选择的一个任意 goroutine。

goroutine 只是处于休眠状态,main一旦结束,它就可以继续运行。

如果您sleep使用select{}永久阻塞操作切换,您将遇到死锁:

c := make(chan int)

go func() {
    fmt.Println("hello")
    c 

在Go Playground上尝试一下。

参见相关:[为什么没有接收器被阻塞的错误?](https://stackoverflow.com/questions/59750056/why-there- is-no-error-that-receiver-is-blocked/59750111#59750111)

今天关于《Go 通道死锁没有发生》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表