相對于死鎖,活鎖(Livelock)是什么概念呢?有意思的是,百度百科把這個解釋錯了。
如果事務T1封鎖了數(shù)據(jù)R,事務T2又請求封鎖R,于是T2等待。T3也請求封鎖R,當T1釋放了R上的封鎖后,系統(tǒng)首先批準了T3的請求,T2仍然等待。然后T4又請求封鎖R,當T3釋放了R上的封鎖之后,系統(tǒng)又批準了T4的請求......T2可能永遠等待。
這顯然是餓死(Starvation)的定義,進入活鎖的進程是沒有阻塞的,會繼續(xù)使用CPU,但外界看到整個進程都沒有前進。
舉個很簡單的例子,兩個人相向過獨木橋,他們同時向一邊謙讓,這樣兩個人都過不去,然后二者同時又移到另一邊,這樣兩個人又過不去了。如果不受其他因素干擾,兩個人一直同步在移動,但外界看來兩個人都沒有前進,這就是活鎖。
活鎖會導致CPU耗盡的,解決辦法是引入隨機變量、增加重試次數(shù)等。
所以活鎖也是程序設計上可能存在的問題,導致進程都沒辦法運行下去了,還耗CPU。
接下來介紹本章最大的內容,POSIX。