我的项目需要在几个不同的物理机器上运行,这些物理机器之间有共享文件系统。由此产生的一个问题是如何将写入同步到公共单个文件。使用线程,可以通过锁轻松实现,但是我的程序由分布在不同机器上的进程组成,我不知道如何进行同步。从理论上讲,任何检查文件是否正在打开的方法或任何类似锁定的解决方案都可以,但我不能自己解决这个问题。蟒蛇的方式将特别受到赞赏。
答案 0 :(得分:1)
有多个进程的文件锁定机制,甚至可以用多种语言编写。 为此使用操作系统特定的锁定机制。 Java JNI,C ++等语言实现了这些锁定机制,以便在多个操作系统进程中同步文件访问[在LTs-Lightweight Threads中]。
请查看您的语言特定的Native文件同步机制。
以下是基于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等工作]。
对于这种场景,我建议使用Double Locking来更好地控制访问。
答案 1 :(得分:0)
只是一个想法...
你不能把'lock'文件放在与你试写的文件相同的目录中吗?在分布式进程中,检查此锁定文件。如果它存在睡眠x量,然后再试一次。同样,当当前打开文件的进程完成时,进程会删除锁定文件吗?
因此,如果您在简单情况下有2个名为A和B的过程:
进程A检查锁定文件,如果它不存在,则会创建锁定文件并执行文件所需的操作。完成后删除此锁定文件。
如果进程A检测到锁定文件,那么这意味着进程B拥有该文件,所以请稍后再睡一觉......再次冲洗。