[英]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.