在Linux上移动文件时的竞争条件

时间:2012-02-27 10:13:46

标签: linux race-condition xfs

假设我有两个脚本。第一个将(使用mv命令)一些文件放入目录,第二个文件偶尔检查一次目录并处理文件。我关注的情况是当第二个脚本开始处理文件时,此时仅部分移动。这可能发生在XFS文件系统的现实生活中吗?

2 个答案:

答案 0 :(得分:7)

这取决于您从哪里移动文件。 mv WITHIN单个文件系统是原子的,否则它必须做一个非原子的复制(后面是原始文件的删除),并且容易出现你提到的那种竞争条件。

FWIW,这是正常的POSIX语义,对XFS没什么特别的。

答案 1 :(得分:1)

在XFS文件系统中,您的情况不会出现竞争条件。但是,与Unix文件系统单线程inode锁相比,XFS允许多个进程使用灵活的锁定方案一次读取和写入文件。 XFS负责通过多个进程序列化同一区域的写入。

XFS使用直接I / O访问文件.Direct I / O允许应用程序指定其数据不缓存在缓冲区缓存中。

使用普通的缓冲I / O时,多个读取器可以同时访问文件,但一次只允许一个编写器访问该文件。使用直接I / O时,多个读取器和写入器可以同时访问该文件。