防止同时进程访问同一文件



我们有一个接收文件的NFS共享。我们还有多个进程在侦听此共享中的新文件。

(在Java中(访问该文件并确保只有一个进程可以处理该文件的安全方法是什么?

我们计划(作为第一步(让进程移动文件,但这在NFS上可能不是原子的?先重命名文件,然后再移动它怎么样?还是多个进程能够在NFS上重命名同一个文件?我想一个安全的方法是在带有行锁定的数据库中添加一个文件锁定标志,但这似乎有些过头了。

有什么建议吗?

在NFS中,移动文件是使用RENAME实现的。

在同一装载中,RENAME在NFS:中是原子的

3.3.14过程14:RENAME-重命名文件或目录

过程RENAME重命名由from.name标识的文件在目录中,从.dir到目录中的to.name,to.dir。该操作必须是客户

不一致的来源包括:

  • 移动到NFS RENAME的非原子客户端转换(例如非常旧的客户端操作系统(-请参阅Files.move(atomic_move(
  • 路径的弱缓存一致性(WCC((例如,如果竞赛进程在不同的机器上(-请参阅NFSv4

我会同意-移动文件。在类Unix系统、Windows系统、NFS和SMB上,在装载中移动文件是原子操作。你应该是安全的。

最新更新