建議性鎖和強制性鎖的區別

       建議性鎖:

所謂建議性鎖就是假定人們都會遵守某些規則去幹一件事。例如,人與車看到紅燈都會停,而看到綠燈纔會繼續走,我們可以稱紅綠等爲建議鎖。但這只是一種規則而已,你並不防止某些人強闖紅燈。而強制性鎖是你想闖紅燈也闖不了。

建議性鎖只在cooperating processes之間纔有用,對cooperating process的理解是最重要的,它指的是會影響其它進程的進程或被別的進程所影響的進程,舉兩個例子:(1)我們可以同時在兩個窗口中運行同一個命令,對同一個文件進行操作,那麼這兩個進程就是cooperating processes;(2)cat file| sort,那麼cat和sort產生的進程就是使用了pipe的cooperating processes。

     強制性鎖:

      強制性鎖是由內核執行的。當文件被上鎖來進行寫入操作時,在鎖定該文件的進程釋放該鎖之前,內核會阻止任何對該文件的讀或寫訪問,每次讀或寫訪問都得檢查鎖是否存在。

1.如果想要打開一個有強制性記錄鎖的文件,而且open函數中指定了O_TRUNC時,即便沒有指定O_NONBLOCKopen調用也會立即出錯返回,errno置爲EAGAIN

2.強制性鎖可以避開。但意義不大,原理是創建個新文件,並刪除(unlink不受強制性影響)原有的文件。

3.強制性鎖雖然解決非協作進程來搗亂的問題,但是,對於多個進程更新共享文件時,對共享數據仍需要某種鎖。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章