我的目标是在我的Java应用程序和node.js应用程序中使用JSON文件中的数据(" data.json")。
Java应用程序读取JSON文件并重写该文件,仅使用其他或已编辑的JSON对象。
我还希望node.js应用程序读取JSON文件并使用其他或编辑的JSON对象重写该文件。
最好的方法是什么?我可以选择从每个来源进行协作,同步和排队更改吗?
由于
答案 0 :(得分:0)
显然,为了防止文件在并发写入和读取时损坏,您需要实现一些锁定系统。在单个进程中的线程之间,这是一项微不足道的任务,但是在进程之间并不容易。
有一个技巧可以在UNIX系统上运行,它基于以下事实:文件重命名过程在unix中是原子的。基于文件重命名,您可以实现简单的互斥锁,甚至更复杂的读写锁语义。对于简单的互斥锁,请使用以下策略:
data*
文件名。如果是data_locked_<some_pid>
,请等待(或订阅FS通知,这样您就不需要轮询FS并花费CPU时间)并重复步骤1. data
,则尝试将文件重命名为data_locked_<pid>
。如果尝试成功 - 使用该文件。data
这个简单的互斥语义将保持文件锁定以供单个进程使用,但是,读取操作可以安全地同时执行,因此您可以通过创建ReadWriteLock来进一步优化解决方案:
读取:
data
还是data_readlocked_<some_pid_list>
。尝试将文件重命名为data_readlocked_<original_pid_list + pid>
。如果尝试失败,请重复步骤1. data
。如果重命名尝试失败,请重复步骤3,直到尝试成功。写作:
data
。如果是,则重命名为data_writelocked_<pid>
,如果失败则重复步骤1.如果文件名是其他任何内容,则data
- 等待并重复步骤1. data
。