Go中協程死鎖

dannisi發表於2021-06-22

錯誤程式碼

package main

func main() {
    ch := make(chan int)
    ch <- 5
}

丟擲錯誤
fatal error: all goroutines are asleep - deadlock!

改造

package main

import (
    "fmt"
    "time"
)

func push(ch chan int) {
    ch <- 5
    time.Sleep(4 * time.Second)
}

func main() {
    ch := make(chan int)
    go push(ch)
    fmt.Printf("data is %d", <-ch)
}

我們通過協程push向通道傳送資料,然後在主協程中獲取資料。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章