05-flock()的限制
55.2.2 flock()的限制
通过flock()放置的锁存在几个限制。
- 只能对整个文件加锁。这种粗粒度的加锁会限制协作进程之间的并发性。例如,假设存在多个进程,其中各个进程都想要同时访问同一个文件的不同部分,那么通过flock()加锁会不必要地阻止这些进程并发完成这些操作。
- 通过flock()只能放置劝告式锁。
- 很多NFS实现不识别flock()放置的锁。
下一节中介绍的fcntl()加锁模型弥补了所有这些不足。
因为历史的原因,Linux NFS服务器不支持flock()锁。从内核2.6.12起,Linux NFS服务器通过将flock()锁实现成整个文件上的一个fcntl()锁来支持flock()锁。这种做法在混合服务器上的BSD锁和客户端上的BSD锁时会导致一些奇怪的结果:客户端通常无法看到看到服务器的锁,反之亦然。