文件锁是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()前后进程还是一个。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- 系统优化大全 (18368篇文章)
- 系统安全设置 (23896篇文章)
- 电脑知识 (6627篇文章)
- 系统安装手册 (21131篇文章)
- 系统备份专题 (17789篇文章)
- Linux集群技术 (8622篇文章)
- 体验Linux的音影世界 (8294篇文章)
- Linux驱动大全 (9106篇文章)
- Linux下的路由的配置与应用 (12115篇文章)
- Linux命令简介 (10188篇文章)
- 最具影响力的七大GNU/Linux发行版 (134次浏览)
- VMware虚拟机Linux通过NAT方式上网 (86次浏览)
- Linux“装机”一条龙 (72次浏览)
- Linux系统命令分类详解 (1) (54次浏览)
- Linux下安装VMware虚拟机的过程详解 (48次浏览)
- 安装qmail全套功略 (46次浏览)
- Linux上的偷窺裝置 (1394的使用) (46次浏览)
- Linux系统管理员秘技:用快捷命令一招制胜 (44次浏览)
- TurboLinux 入门教程:第七课 TurboLinux简介 (42次浏览)
- 多项更新!Ubuntu 8.04 Alpha6发布 (41次浏览)



