码迷,mamicode.com
首页 > 其他好文 > 详细

高级IO——文件锁

时间:2018-08-09 23:10:15      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:记录   之间   ima   info   不用   width   成功   要求   写锁   

文件锁也被称为记录所,文件锁如果深讲的话,内容不少(比如文件锁最起码分为了建议锁和强制性锁,暂时挖坑,后面填)。

文件锁作用

顾名思义,就是用来保护文件数据的。当多个进程共享读写同一个文件时,为了不让进程们各自读写数据时相互干扰,我们可以使用进程信号量来互斥实现,除了可以使用进程信号量以外,还可以使用我们本小节要讲的“文件锁”来实现,而且功能更丰富,使用起来相对还更容易些。

多进程读写文件

 

技术分享图片

多进程共享读写同一个文件时,如果数据很重要的话,为了防止数据相互修改,应该满足如下读写条件:

①写与写应该互斥

当某个进程正在写文件,而且在数据没有写完时,其它进程不能写,否者会相互打乱对方写的数据。

②读与写也应该是互斥的

分两种情况:

1)某个进程正在写数据,而且在数据没有写完时,其它进程不能读数据。因为别人在没有写完之前,读到的数据是不完整的,所以读和写时互斥的。

2)某个进程正在读数据,在数据没有读完之前,其它进程不能写数据。因为可能会扰乱别人读到的数据。

③读与读共享

某个进程在读数时,就算数据没有读完,其它进程也可以共享读数据,并不需要互斥等别人读完后才能读。因为读文件是不会修改文件的内容,所以不用担心数据相互干扰的问题。

总结起来就是,多进程读写文件时,如果你想进行资源保护的话,完美的资源保护应该满足如下这样的。

1)写与写之间互斥

2)读与写之间互斥

3)读与读之间共享

如何实现以上读写要求?

如果使用信号量来实现保护的话,只能是一律互斥,包括读与读都是互斥的,不能够向上面描述的,既能互斥又能共享,但是文件锁可以做到。

文件锁的读锁与写锁

对文件加锁时可以加两种锁,分别是“读文件锁”和“写文件锁”,我们这里简称为读锁和写锁。

读锁、写锁之间关系

①读锁和读锁共享:可以重复加读锁,别人加了读锁在没有解锁之前,我依然可以加读锁,这就是共享。

②读锁与写锁互斥:别人加了读锁没有解锁前,加写锁会失败,反过来也是如此。

加锁失败后两种处理方式,

(1)阻塞,直到别人解锁然后加锁成功为止

(2)出错返回,不阻塞

③写锁与写锁互斥:别人加了写锁在没有解锁前,不能加写锁,加写锁会失败。

加锁失败后两种处理方式,

(1)阻塞,直到别人解锁然后加锁成功为止

(2)出错返回,不阻塞

使用文件锁对文件进行保护

读文件时加读锁,写文件时就加写锁,然后就可以很容易的实现符合如下要求的资源保护。

1)写与写之间互斥

2)读与写之间互斥

3)读与读之间共享

技术分享图片

 

高级IO——文件锁

标签:记录   之间   ima   info   不用   width   成功   要求   写锁   

原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9451894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!