文件鎖是一種文件讀寫機制,在任何特定的時間只允許一個進程訪問一個文件。利用這種機制能夠使讀寫單個文件的過程變得更安全。
在這篇文章中,我們將探討Linux中不同類型的文件鎖,并通過示例程序來理解它們之間的不同之處。
我們將采取以下的例子來解釋為什么需要使用文件鎖。
1、進程“A”打開和讀取一個文件,此文件包含賬戶相關(guān)的一些信息。
2、進程“B”也打開了這個文件,并讀取了文件中的信息。
3、現(xiàn)在,進程“A”更改了其副本中的一條余額記錄,并將其寫入文件。
4、此時,進程“B”并不知道上次讀取的文件已經(jīng)被更改,它還保存著原始的文件副本。然后,進程“B”更改了“A”操作的那條相同的記錄,并將記錄寫入文件。
5、此時,文件中將只保存了進程“B”更改過的記錄。
為了避免這種事情發(fā)生,就要使用文件鎖來確保操作的“序列化”。
以下是Linux系統(tǒng)中兩種常用的文件鎖:
1、協(xié)同鎖
協(xié)同鎖要求參與操作的進程之間協(xié)同合作。假設(shè)進程“A”獲得一個WRITE鎖,并開始向文件中寫入內(nèi)容;此時,進程“B”并沒有試圖獲取一個鎖,它仍然可以打開文件并向文件中寫入內(nèi)容。在此過程中,進程“B”就是一個非合作進程。如果進程“B”試圖獲取一個鎖,那么整個過程就是一個合作的過程,從而可以保證操作的“序列化”。
只有當參與操作的進程是協(xié)同合作的時候,協(xié)同鎖才能發(fā)揮作用。協(xié)同鎖有時也被稱為“非強制”鎖。
2、強制鎖
強制鎖不需要參與操作的進程之間保持協(xié)同合作。它利用內(nèi)核來查檢每個打開、讀取、寫入操作,從而保證在調(diào)用這些操作時不違反文件上的鎖規(guī)則。
上一篇 抽象類
下一篇 java輸入輸出(快速)