Edu*_*rch 5 java synchronization file-access
我在一台虚拟机中运行着多个应用程序。我在一台服务器上运行着多个虚拟机。而且我有多台服务器。他们都使用Linux上的共享文件夹共享文件。该文件由所有应用程序读取和写入。在写入过程中,不允许任何应用程序读取此文件。写入相同:如果应用程序正在读取文件,则不允许应用程序对其进行写入。
如何管理应用程序的同步,以便它们在读取之前等待写过程完成,反之亦然?(虚拟机内部的应用程序必须同步,服务器之间的应用程序也必须同步)
当前的实现使用“文件信号量”。如果要写入文件,则应用程序将尝试通过在共享文件夹中创建其他文件(将其命名为“ file.semaphore”)来“获取”信号灯。如果“ file.semaphore”文件已经存在,则意味着该信号已被其他应用程序锁定。这种方法的问题是我不能确保“文件存在”-测试和“创建文件”-操作是原子执行的。这样,两个应用程序可能会测试“ file.semaphore”文件,发现该文件不存在,并尝试同时创建该文件。
您可以使用 NIO 锁定功能。请参阅FileChannel#lock()。
\n\n但是,只有当底层文件系统支持通过网络锁定时,这才有效。最近的 NFS 应该支持它。也许,Samba 也支持它们,但不能肯定地说。
\n\n例如,请参阅文章。
\n| 归档时间: |
|
| 查看次数: |
19672 次 |
| 最近记录: |