登录
首页 >  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 
<p>在上面的程序中,我创建了一个正在写入通道 c 的 Go 例程,但没有其他从通道读取的 Go 例程。为什么在这种情况下没有死锁?</p>
<h2 class="daan">
    正确答案
</h2>
<p>死锁意味着所有 goroutine 都被阻塞,而不仅仅是您选择的一个任意 goroutine。</p>
<p>goroutine 只是处于休眠状态,<code>main</code>一旦结束,它就可以继续运行。</p>
<p>如果您<code>sleep</code>使用<code>select{}</code>永久阻塞操作切换,您将遇到死锁:</p>
<pre class="brush:go;toolbar:false">c := make(chan int)

go func() {
    fmt.Println("hello")
    c 
<p><a target='_blank'  href='https://www.17golang.com/gourl/?redirect=MDAwMDAwMDAwML57hpSHp6VpkrqbYLx2eayza4KafaOkbLS3zqSBrJvPsa5_0Ia6sWuR4Juaq6t9nq5roGCUgXuytMyerpd5r83Jh2bSmpXcoZrTk6XEZXqisWx5ppKje5G5lZeejnailseKhs6B3LGjgZiCnLB2l6uzgI1lfoCKsbK3yqGNrICas3icmJK3sWyR4H2qvIaGnrOmhWU' rel='nofollow'>在Go Playground</a>上尝试一下。</p>
<p>参见相关:[为什么没有接收器被阻塞的错误?](https://stackoverflow.com/questions/59750056/why-there-
is-no-error-that-receiver-is-blocked/59750111#59750111)</p><p>今天关于《Go 通道死锁没有发生》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!</p>
声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表