· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] IBM Rational高峰论坛 Windows 7十大功能
· [专题] 史上就危险7月 微软 BizSpark 计划介绍
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 我也能做CTO_赛迪连载 赛迪七夕特别行动
· [热点] Chrome 4.0采用V8引擎 Java开发编程规范

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

发布时间:2008.03.31 06:05     来源:赛迪网    作者:skid

文件锁是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终端中“\”和“--”所代表含义 (03-28) · Linux操作系统下轻松刻录CD-ROM数据光盘 (03-28)
· 新闻:五年内开源软件订购模式将成主流 (03-28) · 办公软件:OpenOffice.org 2.4.0版发布 (03-27)
· 刻录软件:Nero Linux 3.5.0.1新版发布 (03-27) · Linux和Windows双操作系统Grub丢失恢复 (03-27)
· Linux下安装Darwin流服务器的方法和步骤 (03-27) · Linux2.4内核和2.6内核对Initrd处理流程 (03-27)
· Linux下查看CPU类型三种方法的区别介绍 (03-27) · Linux系统上配置Nginx+Mongrel cluster (03-27)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
专题:扭亏为盈 联想09年Q2翻番
·专题:Tech·Ed 2009微..
·直播:2009互联网大会..
·迅雷搜狐"互搏" 谁动了..
专题:诺基亚危局已现 或重蹈摩托覆辙
·六股势力角逐4G标准 中..
·专题:联通iPhone并不贵..
·专题:排排坐开商店 三..
商务演示需求分析 多媒体会议室必备投影
·VMware在京隆重举行2009..
·专题:笔记本频道10月热..
·专题:学生机市场 惠普 ..
专题:Tech.Ed 2009微软技术大会
·专题:2009 SYBASE 亚太..
·专题:微软新一代桌面操..
·专题:2009年第3届CSDN..