4

我的项目需要在几个不同的物理机器上运行,它们之间有共享的文件系统。由此产生的一个问题是如何同步写入一个普通的单个文件。使用线程,可以通过锁轻松实现,但是我的程序由分布在不同机器上的进程组成,我不知道如何同步。理论上,任何检查文件是否正在打开的方法或任何类似锁的解决方案都可以,但我自己无法破解。一种python方式将特别受到赞赏。

4

2 回答 2

0

有多个进程的文件锁定机制,甚至是用多种语言编写的。为此使用操作系统特定的锁定机制。Java JNI、C++ 等语言已经实现了这些锁定机制,以在多个 OS 进程内同步文件访问[在 LTs-轻量级线程内]。

为此,请查看您的语言特定的本机文件同步机制。

以下是基于 Java 的示例:

FileInputStream in = new FileInputStream(file);
try {
    java.nio.channels.FileLock lock = in.getChannel().lock();
    try {
        Reader reader = new InputStreamReader(in, charset);
        ...
    } finally {
        lock.release();
    }
} finally {
    in.close();
}

这种锁定应该是独立于操作系统的[在 Unix 系统、Windows 等中工作]。

对于这种场景,我建议使用双重锁定来更好地控制访问。

于 2013-06-29T06:15:16.380 回答
0

只是一个想法...

您不能将“锁定”文件放在与您尝试写入的文件相同的目录中吗?在您的分布式进程中检查此锁定文件。如果它存在睡眠 x 量,然后重试。同样,当当前打开文件的进程完成时,该进程会删除锁定文件吗?

因此,如果您在简单的情况下有 2 个称为 A 和 B 的进程:

进程 A 检查锁定文件,如果它不存在,它会创建锁定文件并对文件执行所需的操作。完成后,它会删除此锁定文件。

如果进程 A 检测到锁定文件,则意味着进程 B 拥有该文件,因此睡眠并稍后重试....冲洗重复。

于 2013-06-29T02:28:15.193 回答