快速业务通道

关于Linux系统文件锁的几个知识要点

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-06

文件锁是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关闭,这两种情形都会导致锁释放:

fd1 = open(pathname, ...);
read_lock(fd1, ...);
fd2 = dup(fd1);
close(fd2);

fd1 = open(pathname, ...);
read_lock(fd1, ...);
fd2 = open(pathname, ...)
close(fd2);

APUE中有一个FreeBSD的文件锁实现图可以帮助理解以上内容,该图对Linux也是适用的.

2、fork()后子进程不继承父进程的锁,这个很容易理解,锁就是被进程用来执行互斥等任务的,如果承就乱了.

3、exec()可以继承锁,取决于exec()后加锁fd是否被关闭(close-on-exec),这是exec()前后进程还是一个.

Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号