簡體   English   中英

Go 通道死鎖未發生

[英]Go channel deadlock is not happening

package main
import (
    "fmt"
    "time"
)

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

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

    time.Sleep(2 * time.Second)
}

在上面的程序中,我創建了一個 Go 例程,它正在寫入通道 c 但沒有其他 go 例程正在從通道中讀取。 為什么在這種情況下沒有死鎖?

死鎖意味着所有 goroutine 都被阻塞,而不僅僅是您選擇的一個任意 goroutine。

main goroutine 只是處於休眠狀態,一旦結束,它就可以繼續運行。

如果您使用select{}永久阻塞操作切換sleep ,您將遇到死鎖:

c := make(chan int)

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

select {}

Go 游樂場上試一試。

參見相關: 為什么沒有接收器被阻塞的錯誤?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM