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 協議》,轉載必須註明作者和本文連結