### 活鎖概念
相對于死鎖,活鎖(Livelock)是什么概念呢?有意思的是,百度百科把這個解釋錯了。
~~~
如果事務T1封鎖了數據R,事務T2又請求封鎖R,于是T2等待。T3也請求封鎖R,當T1釋放了R上的封鎖后,系統首先批準了T3的請求,T2仍然等待。然后T4又請求封鎖R,當T3釋放了R上的封鎖之后,系統又批準了T4的請求......T2可能永遠等待。
~~~
這顯然是餓死(Starvation)的定義,進入活鎖的進程是沒有阻塞的,會繼續使用CPU,但外界看到整個進程都沒有前進。
### 活鎖實例
舉個很簡單的例子,兩個人相向過獨木橋,他們同時向一邊謙讓,這樣兩個人都過不去,然后二者同時又移到另一邊,這樣兩個人又過不去了。如果不受其他因素干擾,兩個人一直同步在移動,但外界看來兩個人都沒有前進,這就是活鎖。
活鎖會導致CPU耗盡的,解決辦法是引入隨機變量、增加重試次數等。
所以活鎖也是程序設計上可能存在的問題,導致進程都沒辦法運行下去了,還耗CPU。
接下來介紹本章最大的內容,POSIX。
- 前言
- 致謝
- 概述
- 使用代碼
- 使用Docker
- 進程基礎
- 進程是什么
- Hello World
- PID
- PPID
- 使用PID
- 進程名字
- 進程參數
- 輸入與輸出
- 并發與并行
- 進程越多越好
- 進程狀態
- 退出碼
- 進程資源
- 死鎖
- 活鎖
- POSIX
- Nohup
- 運行進程
- Go編程實例
- 衍生新進程
- 執行外部程序
- 復制進程
- 進程進階
- 文件鎖
- 孤兒進程
- 僵尸進程
- 守護進程
- 進程間通信
- 信號
- Linux系統調用
- 文件描述符
- Epoll
- 共享內存
- Copy On Write
- Cgroups
- Namespaces
- 項目實例Run
- 項目架構
- 代碼實現
- 注意事項
- 創建目錄權限
- 捕獲SIGKILL
- Sendfile系統調用
- 后記
- 參考書籍
- 項目學習
- 再次感謝