### 死鎖概念
死鎖(Deadlock)就是一個進程拿著資源A請求資源B,另一個進程拿著資源B請求資源A,雙方都不釋放自己的資源,導致兩個進程都進行不下去。
### 示例程序
我們可以寫代碼模擬進程死鎖的例子。
~~~
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虛擬機已經替我們檢測出死鎖的情況,因為所有Goroutine都阻塞住沒有運行,關于Goroutine的概念有機會詳細介紹一下。
我們可能很早就接觸過死鎖的概念,也很容易模擬出來,那么你是否知道活鎖呢?
- 前言
- 致謝
- 概述
- 使用代碼
- 使用Docker
- 進程基礎
- 進程是什么
- Hello World
- PID
- PPID
- 使用PID
- 進程名字
- 進程參數
- 輸入與輸出
- 并發與并行
- 進程越多越好
- 進程狀態
- 退出碼
- 進程資源
- 死鎖
- 活鎖
- POSIX
- Nohup
- 運行進程
- Go編程實例
- 衍生新進程
- 執行外部程序
- 復制進程
- 進程進階
- 文件鎖
- 孤兒進程
- 僵尸進程
- 守護進程
- 進程間通信
- 信號
- Linux系統調用
- 文件描述符
- Epoll
- 共享內存
- Copy On Write
- Cgroups
- Namespaces
- 項目實例Run
- 項目架構
- 代碼實現
- 注意事項
- 創建目錄權限
- 捕獲SIGKILL
- Sendfile系統調用
- 后記
- 參考書籍
- 項目學習
- 再次感謝