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