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