棋道僵局没有发生

问题描述 投票:1回答:1
package main
import (
    "fmt"
    "time"
)

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

    go func() {
        fmt.Println("hello")
        c <- 10
    }()

    time.Sleep(2 * time.Second)
}

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

go goroutine
1个回答
3
投票

僵局意味着所有的goroutine都被阻断,而不仅仅是您任意选择的一个goroutine。

僵局是指所有的goroutine都被阻塞,而不仅仅是你选择的一个任意goroutine。main goroutine只是处于睡眠状态,一旦睡眠结束,它就可以继续运行。

如果你把 sleep 附带 select{} 阻止永远的操作,你会得到你的僵局。

c := make(chan int)

go func() {
    fmt.Println("hello")
    c <- 10
}()

select {}

试试吧 去游乐场.

请看相关内容。为什么没有接收机被屏蔽的错误?

© www.soinside.com 2019 - 2024. All rights reserved.