代码之家  ›  专栏  ›  技术社区  ›  Sajal Dutta

相应地锁定和更新文件

  •  1
  • Sajal Dutta  · 技术社区  · 15 年前

    注释 :我读过其他关于如何锁定和解锁文件的文章。我没有发现我不知道的特别之处。所以我要把我的场景放在这里,以便有人能提出一些建议。

    根据我的经验,当来自多个JVM实例的不同对象试图锁定和更新文件时,fileChannel.lock不能保证锁定和解锁文件的情况。

    我的应用程序中的场景是-有三个独立的程序来更新文件。这些程序在不同的JVM实例上运行。假设程序是a、b和c,文件是f。如果a锁定了文件f,b和c应该等待f释放,然后其他程序中的一个才能保留它。如果程序在同一个JVM实例上运行,这就可以正常工作。不幸的是,这在多个JVM实例中不起作用。

    我还有另外一个想法,那就是用一个平面文件,我会在其中指出F是否应该更新。平面文件的内容可以锁定或解锁。默认/初始值将被解锁。因此,当其中一个程序想要更新f时,它需要看到平面文件中的标志。如果标志显示“锁定”,它应该等待。在这种方法中,有一个问题——如果多个程序同时打开平面文件并看到“未锁定”或两个程序正在等待平面文件读取未锁定,而同时又看到“未锁定”的文件,该怎么办?

    有什么主意吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Aaron Digulla    15 年前

    如果需要锁定文件系统,那么必须创建一个目录。目录存在表示“已锁定”,缺少目录表示未锁定。

    原因是创建和删除目录必须是任何文件系统中的原子操作。因此,一旦两个进程尝试创建同一个目录,其中一个进程就会出错。

    推荐文章