当前位置:嗨网首页>书籍在线阅读

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锁时会导致一些奇怪的结果:客户端通常无法看到看到服务器的锁,反之亦然。