文件锁是一种文件读写机制,在任何特定的时间只允许一个进程访问一个文件。利用这种机制能够使读写单个文件的过程变得更安全。
在这篇文章中,我们将探讨Linux中不同类型的文件锁,并通过示例程序来理解它们之间的不同之处。
我们将采取以下的例子来解释为什么需要使用文件锁。
1、 进程“A”打开和读取一个文件,此文件包含账户相关的一些信息。
2、 进程“B”也打开了这个文件,并读取了文件中的信息。
3、 现在,进程“A”更改了其副本中的一条余额记录,并将其写入文件。
4、 此时,进程“B”并不知道上次读取的文件已经被更改,它还保存着原始的文件副本。然后,进程“B”更改了“A”操作的那条相同的记录,并将记录写入文件。
5、 此时,文件中将只保存了进程“B”更改过的记录。
为了避免这种事情发生,就要使用文件锁来确保操作的“序列化”。
翻阅参考资料,你会发现文件锁可以进行很多的分类,最常见的主要有读锁与写锁,前者也叫共享锁,后者也叫排斥锁,值得注意的是,多个读锁之间是不会相互干扰的,多个进程可以在同一时刻对同一个文件加读锁;但是,如果已经有一个进程对该文件加了写锁,那么其他进程则不能对该文件加读锁或者写锁,直到这个进程将写锁释放,因此可以总结为:对于同一个文件而言,它可以同时拥有多个读者,但是在某一时刻,他只能拥有一个写者。
根据内核行为来分,文件锁可以分成劝告锁与强制锁两大类。
(
文件系统级别的锁有四种,最基本的两种是劝告锁和强制锁,剩下的两种是强制锁的变种。
应用级别上对锁的操作有两种,加读锁,或者加写锁(又叫共享锁与独占锁)。
那么,平时所说的加锁,实际上应该是在劝告锁或者强制锁上加读或者写锁。)
http://blog.csdn.net/dragon_li_chen/article/details/17147911
http://blog.sina.com.cn/s/blog_804354760101al6q.html