我在一台虚拟机中运行着多个应用程序。我在一台服务器上运行着多个虚拟机。而且我有多台服务器。他们都使用Linux上的共享文件夹共享文件。该文件由所有应用程序读取和写入。在写入过程中,不允许任何应用程序读取此文件。写入相同:如果应用程序正在读取文件,则不允许应用程序对其进行写入。
如何管理应用程序的同步,以便它们在读取之前等待写过程完成,反之亦然?(虚拟机内部的应用程序必须同步,服务器之间的应用程序也必须同步)
当前的实现使用“文件信号量”。如果要写入文件,则应用程序将尝试通过在共享文件夹中创建其他文件(将其命名为“ file.semaphore”)来“获取”信号灯。如果“ file.semaphore”文件已经存在,则意味着该信号已被其他应用程序锁定。这种方法的问题是我不能确保“文件存在”-测试和“创建文件”-操作是原子执行的。这样,两个应用程序可能会测试“ file.semaphore”文件,发现该文件不存在,并尝试同时创建该文件。