锁 (计算机科学)
外观
在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。
一般的鎖是建議鎖(advisory lock),每個線程在訪問對應資源前都需取得鎖的資訊,再根據資訊決定是否可以存取。若存取對應資訊,鎖的狀態會改變為鎖定,因此其他線程此時不會訪問該資源,當資源結束後,會恢復鎖的狀態,允許其他線程的訪問。我们日常使用的基本都是建议锁,它并不强制生效。这里的不强制生效的意思是,如果某一个进程对一个文件持有一把锁之后,其他进程仍然可以直接对文件进行各种操作的,比如open、read、write。只有当多个进程在操作文件前都去检查和对相关锁进行锁操作的时候,文件锁的规则才会生效。这就是一般建议锁的行为。
有些系統有強制鎖(mandatory lock),若有未授權的線程想要訪問鎖定的資料,在訪問時就會產生异常。强制锁试图实现一套内核级的锁操作。当有进程对某个文件上锁之后,其他进程即使不在操作文件之前检查锁,也会在open、read或write等文件操作时发生错误。内核将对有锁的文件在任何情况下的锁规则都生效,这就是强制锁的行为。由此可以理解,如果内核想要支持强制锁,将需要在内核实现open、read、write等系统调用内部进行支持[1]。
相關條目
[编辑]
- ^ Linux的进程间通信-文件和文件锁. https://zorro.gitbooks.io/. [2022-06-26].