课程咨询 :025-84812726

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

    发布:linux培训      来源:南京达内      

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

         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()前后进程还是一个

上一篇:Linux系统“死机”时解决方法

下一篇:linux生成引导盘与驱动程序盘

最新开班日期  |  更多

 Linux--零基础全日制班

Linux--零基础全日制班

开班日期:04-28

Linux--全日制班

Linux--全日制班

开班日期:04-28

Linux--零基础周末班

Linux--零基础周末班

开班日期:04-28

Linux--周末班

Linux--周末班

开班日期:04-28

  • 地址:南京市龙蟠中路30号东来商务中心A座5楼
  • 课程培训电话:025-84812726     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56