高级IO——文件锁
Posted kelamoyujuzhen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高级IO——文件锁相关的知识,希望对你有一定的参考价值。
文件锁也被称为记录所,文件锁如果深讲的话,内容不少(比如文件锁最起码分为了建议锁和强制性锁,暂时挖坑,后面填)。
文件锁作用
顾名思义,就是用来保护文件数据的。当多个进程共享读写同一个文件时,为了不让进程们各自读写数据时相互干扰,我们可以使用进程信号量来互斥实现,除了可以使用进程信号量以外,还可以使用我们本小节要讲的“文件锁”来实现,而且功能更丰富,使用起来相对还更容易些。
多进程读写文件
多进程共享读写同一个文件时,如果数据很重要的话,为了防止数据相互修改,应该满足如下读写条件:
①写与写应该互斥
当某个进程正在写文件,而且在数据没有写完时,其它进程不能写,否者会相互打乱对方写的数据。
②读与写也应该是互斥的
分两种情况:
1)某个进程正在写数据,而且在数据没有写完时,其它进程不能读数据。因为别人在没有写完之前,读到的数据是不完整的,所以读和写时互斥的。
2)某个进程正在读数据,在数据没有读完之前,其它进程不能写数据。因为可能会扰乱别人读到的数据。
③读与读共享
某个进程在读数时,就算数据没有读完,其它进程也可以共享读数据,并不需要互斥等别人读完后才能读。因为读文件是不会修改文件的内容,所以不用担心数据相互干扰的问题。
总结起来就是,多进程读写文件时,如果你想进行资源保护的话,完美的资源保护应该满足如下这样的。
1)写与写之间互斥
2)读与写之间互斥
3)读与读之间共享
如何实现以上读写要求?
如果使用信号量来实现保护的话,只能是一律互斥,包括读与读都是互斥的,不能够向上面描述的,既能互斥又能共享,但是文件锁可以做到。
文件锁的读锁与写锁
对文件加锁时可以加两种锁,分别是“读文件锁”和“写文件锁”,我们这里简称为读锁和写锁。
读锁、写锁之间关系
①读锁和读锁共享:可以重复加读锁,别人加了读锁在没有解锁之前,我依然可以加读锁,这就是共享。
②读锁与写锁互斥:别人加了读锁没有解锁前,加写锁会失败,反过来也是如此。
加锁失败后两种处理方式,
(1)阻塞,直到别人解锁然后加锁成功为止
(2)出错返回,不阻塞
③写锁与写锁互斥:别人加了写锁在没有解锁前,不能加写锁,加写锁会失败。
加锁失败后两种处理方式,
(1)阻塞,直到别人解锁然后加锁成功为止
(2)出错返回,不阻塞
使用文件锁对文件进行保护
读文件时加读锁,写文件时就加写锁,然后就可以很容易的实现符合如下要求的资源保护。
1)写与写之间互斥
2)读与写之间互斥
3)读与读之间共享
以上是关于高级IO——文件锁的主要内容,如果未能解决你的问题,请参考以下文章