锁 (计算机科学)

计算机科学中,是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。

一般的锁是建议锁(advisory lock),每个线程在访问对应资源前都需取得锁的资讯,再根据资讯决定是否可以存取。若存取对应资讯,锁的状态会改变为锁定,因此其他线程此时不会访问该资源,当资源结束后,会恢复锁的状态,允许其他线程的访问。我们日常使用的基本都是建议锁,它并不强制生效。这里的不强制生效的意思是,如果某一个进程对一个文件持有一把锁之后,其他进程仍然可以直接对文件进行各种操作的,比如open、read、write。只有当多个进程在操作文件前都去检查和对相关锁进行锁操作的时候,文件锁的规则才会生效。这就是一般建议锁的行为。

有些系统有强制锁(mandatory lock),若有未授权的线程想要访问锁定的资料,在访问时就会产生异常。强制锁试图实现一套内核级的锁操作。当有进程对某个文件上锁之后,其他进程即使不在操作文件之前检查锁,也会在open、read或write等文件操作时发生错误。内核将对有锁的文件在任何情况下的锁规则都生效,这就是强制锁的行为。由此可以理解,如果内核想要支持强制锁,将需要在内核实现open、read、write等系统调用内部进行支持[1]

相关条目 编辑


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