|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
要多google,因为我不可能,也不可以给你解答所有内容,我只能告诉你一些关键点,甚至我会故意隐瞒答案,因为在寻找答案的过程中。
文件锁是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()前落后程仍是一个
</p>
RedHatCentOS等等.学习linux不是逛自由市场,选定版本就要静下心来学习.不要今天换版本明天要升级.这样对你没有好处。 |
|