鎖 (電腦科學)
在電腦科學中,鎖是在執行多線程時用於強行限制資源訪問的同步機制,即用於在並行控制中保證對互斥要求的滿足。
一般的鎖是建議鎖(advisory lock),每個線程在訪問對應資源前都需取得鎖的資訊,再根據資訊決定是否可以存取。若存取對應資訊,鎖的狀態會改變為鎖定,因此其他線程此時不會訪問該資源,當資源結束後,會恢復鎖的狀態,允許其他線程的訪問。我們日常使用的基本都是建議鎖,它並不強制生效。這裏的不強制生效的意思是,如果某一個行程對一個檔案持有一把鎖之後,其他行程仍然可以直接對檔案進行各種操作的,比如open、read、write。只有當多個行程在操作檔案前都去檢查和對相關鎖進行鎖操作的時候,檔案鎖的規則才會生效。這就是一般建議鎖的行為。
有些系統有強制鎖(mandatory lock),若有未授權的線程想要訪問鎖定的資料,在訪問時就會產生異常。強制鎖試圖實現一套內核級的鎖操作。當有行程對某個檔案上鎖之後,其他行程即使不在操作檔案之前檢查鎖,也會在open、read或write等檔案操作時發生錯誤。內核將對有鎖的檔案在任何情況下的鎖規則都生效,這就是強制鎖的行為。由此可以理解,如果內核想要支援強制鎖,將需要在內核實現open、read、write等系統呼叫內部進行支援[1]。
相關條目
- ^ Linux的进程间通信-文件和文件锁. https://zorro.gitbooks.io/. [2022-06-26].