檔案鎖是一種檔案讀寫機制,在任何特定的時間只允許乙個程序訪問乙個檔案。利用這種機制能夠使讀寫單個檔案的過程變得更安全。
在這篇文章
中,我們將**linux
中不同型別的檔案鎖,並通過示例程式來理解它們之間的不同之處。
我們將採取以下的例子來解釋為什麼需要使用檔案鎖。
1、程序「a」開啟和讀取乙個檔案,此檔案包含賬戶相關的一些資訊。
2、程序「b」也開啟了這個檔案,並讀取了檔案中的資訊。
3、現在,程序「a」更改了其副本中的一條餘額記錄,並將其寫入檔案。
4、此時,程序「b」並不知道上次讀取的檔案已經被更改,它還儲存著原始的檔案副本。然後,程序「b」更改了「a」操作的那條相同的記錄,並將記錄寫入檔案。
5、此時,檔案中將只儲存了程序「b」更改過的記錄。
為了避免這種事情發生,就要使用檔案鎖來確保操作的「序列化」。
以下是linux系統中兩種常用的檔案鎖:
1、協同鎖
協同鎖要求參與操作的程序之間協同合作。假設程序「a」獲得乙個write鎖,並開始向檔案中寫入內容;此時,程序「b」並沒有試圖獲取乙個鎖,它仍然可以開啟檔案並向檔案中寫入內容。在此過程中,程序「b」就是乙個非合作程序。如果程序「b」試圖獲取乙個鎖,那麼整個過程就是乙個合作的過程,從而可以保證操作的「序列化」。
只有當參與操作的程序是協同合作的時候,協同鎖才能發揮作用。協同鎖有時也被稱為「非強制」鎖。
2、強制鎖
強制鎖不需要參與操作的程序之間保持協同合作。它利用核心來查檢每個開啟、讀取、寫入操作,從而保證在呼叫這些操作時不違反檔案上的鎖規則。
Linux中的兩種檔案鎖 協同鎖與強制鎖
檔案鎖是一種檔案讀寫機制,在任何特定的時間只允許乙個程序訪問乙個檔案。利用這種機制能夠使讀寫單個檔案的過程變得更安全。在這篇文章中,我們將 linux中不同型別的檔案鎖,並通過示例程式來理解它們之間的不同之處。我們將採取以下的例子來解釋為什麼需要使用檔案鎖。1 程序 a 開啟和讀取乙個檔案,此檔案包...
樂觀鎖與悲觀鎖的區別
在多使用者環境中,在同一時間可能會有多個使用者更新相同的記錄,這會產生衝突。這就是著名的併發性問題。典型的衝突有 l 丟失更新 乙個事務的更新覆蓋了其它事務的更新結果,就是所謂的更新丟失。例如 使用者a把值從6改為2,使用者b把值從2改為6,則使用者a丟失了他的更新。l 髒讀 當乙個事務讀取其它完成...
自旋鎖與互斥鎖的區別
自旋鎖 spin lock 自旋鎖與互斥鎖有點類似,只是自旋鎖不會引起呼叫者睡眠,如果自旋鎖已經被別的執行單元保持,呼叫者就一直迴圈在那裡看是 否該自旋鎖的保持者已經釋放了鎖,自旋 一詞就是因此而得名。其作用是為了解決某項資源的互斥使用。因為自旋鎖不會引起呼叫者睡眠,所以自旋鎖的效率遠 高於互斥鎖。...