关于Linux系统文件锁的几个知识要点
文件锁是Linux上最常用的进程间同步机制之一,相比sysv的信号量,文件锁更容易使用(sysv信号量的麻烦之处在于它的key获取机制). APUE对文件锁做了详尽的描述,其中需要注意的有以下几点,原文可参见APUE2的14.3节: 1、文件锁(file_lock)与文件(确切的说是文件的inode)及进程捆绑,Linux实现中文件的file_lock结构挂在该文件对应的inode结构中,而file_lock结构中包含了该锁所属进程的pid.这种实现方式造成了两种后果: a.进程退出时,属于该进程的所有文件锁被释放. b.关闭加锁进程所属的任何一个指向加锁文件的fd或file时,锁被释放.这是file_lock结构选择挂在inode上而不是fd或file(内核结构,fd的下一站),无法具体区分文件锁对应的fd或file上.这点需要特别注意,APUE上列出了两个例子,第一个对应fd关闭,第二个对应file关闭,这两种情形都会导致锁释放:
APUE中有一个FreeBSD的文件锁实现图可以帮助理解以上内容,该图对Linux也是适用的. 2、fork()后子进程不继承父进程的锁,这个很容易理解,锁就是被进程用来执行互斥等任务的,如果承就乱了. 3、exec()可以继承锁,取决于exec()后加锁fd是否被关闭(close-on-exec),这是exec()前后进程还是一个.
|
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |