2022-07-10:以下go語言程式碼輸出什麼?A:A,B;B:A,C:A,fatal error;D:

moonfdd發表於2022-07-10

2022-07-10:以下go語言程式碼輸出什麼?A:A,B;B:A,C:A,fatal error;D:fatal error…

func main() {
    var m sync.Mutex
    fmt.Print("A, ")
    m.Lock()

    go func() {
        time.Sleep(200 * time.Millisecond)
        m.Unlock()
    }()

    m.Lock()
    fmt.Print("B ")
}

答案2022-07-10:

答案選A。在 main goroutine 第二次請求 Lock 時,會堵塞。這樣另一個 goroutine 會執行,釋放鎖。如果沒有另一個 goroutine 釋放鎖,則會報 fatal error,所有的 goroutine 都處於 sleep 狀態,死鎖!

在這裡插入圖片描述
在這裡插入圖片描述

本作品採用《CC 協議》,轉載必須註明作者和本文連結
微信公眾號:福大大架構師每日一題。最新面試題,涉及golang,rust,mysql,redis,雲原生,演算法,分散式,網路,作業系統。

相關文章