事情就是这样:我有两个应用程序,用C++编写并在两台具有不同操作系统的机器上运行(一个Linux和一个Windows).其中一个过程负责更新NAS(网络附加存储)上的XML文件,而另一个过程则读取此文件.
是否可以同步这两个进程,以避免在修改文件的同时读取文件?
您可以在执行写入之前在服务器上创建锁定文件,等待然后在完成时写入和删除.在读取文件之前,让读取进程检查令牌.
编辑:要处理注释,您可以实现双重检查锁定类型模式.读者和作者都有一个锁定文件并在你工作之前仔细检查,例如:
Reader:检查写锁文件,创建读锁文件,检查写锁文件,如果存在则删除读文件并中止.
Writer:检查读锁文件,创建写锁文件,检查读锁文件,如果存在则删除写锁文件并中止.
这将阻止您的进程相互踩踏,但可能会出现潜在的竞争条件,因为您可能会检查两个进程,然后创建然后同时重新检查,尽管这不会导致数据以不一致的状态读取但会导致两个读取并编写进程以中止指定的延迟
谢谢大家的答案.
最后我们设法解决了我们的问题,而不是使用操作系统的锁定命令(因为我们不确定它们是否会正确传播到NAS头的操作系统),而是通过创建锁定目录而不是锁定文件.目录创建是一种原子操作,如果该文件夹已存在,则返回错误值.因此,我们不必在获取之前检查锁存在,两个操作都是一步完成的.