免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2075 | 回复: 2
打印 上一主题 下一主题

Linux文件锁的几个要点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-27 17:41 |只看该作者 |倒序浏览
    Linux文件锁的几个要点
Du XiaoGang
    文件锁是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()前后进程还是
一个。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/10449/showart_509901.html

论坛徽章:
0
2 [报告]
发表于 2014-04-17 19:56 |只看该作者
不错!!!

论坛徽章:
0
3 [报告]
发表于 2014-04-17 19:57 |只看该作者
lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP