死鎖(Deadlock)就是一個(gè)進(jìn)程拿著資源A請(qǐng)求資源B,另一個(gè)進(jìn)程拿著資源B請(qǐng)求資源A,雙方都不釋放自己的資源,導(dǎo)致兩個(gè)進(jìn)程都進(jìn)行不下去。
我們可以寫代碼模擬進(jìn)程死鎖的例子。
package main
func main() {
ch := make(chan int)
<-ch
}
root@fa13d0439d7a:/go/src# go run deadlock.go
fatal error: all goroutines are asleep - deadlock!
goroutine 16 [chan receive]:
main.main()
/go/src/deadlock.go:5 +0x4f
exit status 2
這里Go虛擬機(jī)已經(jīng)替我們檢測(cè)出死鎖的情況,因?yàn)樗蠫oroutine都阻塞住沒(méi)有運(yùn)行,關(guān)于Goroutine的概念有機(jī)會(huì)詳細(xì)介紹一下。
我們可能很早就接觸過(guò)死鎖的概念,也很容易模擬出來(lái),那么你是否知道活鎖呢?