鎖 (計算機科學)

計算機科學中,是在執行多線程時用於強行限制資源訪問的同步機制,即用於在並發控制中保證對互斥要求的滿足。

一般的鎖是建議鎖(advisory lock),每個線程在訪問對應資源前都需取得鎖的資訊,再根據資訊決定是否可以存取。若存取對應資訊,鎖的狀態會改變為鎖定,因此其他線程此時不會訪問該資源,當資源結束後,會恢復鎖的狀態,允許其他線程的訪問。我們日常使用的基本都是建議鎖,它並不強制生效。這裡的不強制生效的意思是,如果某一個進程對一個文件持有一把鎖之後,其他進程仍然可以直接對文件進行各種操作的,比如open、read、write。只有當多個進程在操作文件前都去檢查和對相關鎖進行鎖操作的時候,文件鎖的規則才會生效。這就是一般建議鎖的行為。

有些系統有強制鎖(mandatory lock),若有未授權的線程想要訪問鎖定的資料,在訪問時就會產生異常。強制鎖試圖實現一套內核級的鎖操作。當有進程對某個文件上鎖之後,其他進程即使不在操作文件之前檢查鎖,也會在open、read或write等文件操作時發生錯誤。內核將對有鎖的文件在任何情況下的鎖規則都生效,這就是強制鎖的行為。由此可以理解,如果內核想要支持強制鎖,將需要在內核實現open、read、write等系統調用內部進行支持[1]

相關條目


  1. ^ Linux的进程间通信-文件和文件锁. https://zorro.gitbooks.io/. [2022-06-26].