同时更新文件而不锁定文件

时间:2013-04-20 16:26:50

标签: c++ c perl

问题 - 多个进程想要同时更新文件。我不想使用文件锁定功能作为高负载环境,进程可能会阻塞一段时间,我不想要。我希望像所有进程一样将数据发送到队列或某个共享位置或其他东西,并且一个主进程将继续从那里获取数据并写入文件。因此没有进程会阻塞。

使用套接字编程的一种可能性。所有进程都会将数据发送到单个端口,并且主机继续监听此单个端口并将数据存储到文件。但是如果主机停机几秒钟会怎么样。如果它发生的话比我写的要多基于时间戳而不是以后同步的某个文件。但是我暂时搁置并寻找其他解决方案。(没有数据丢失)

另一种可能性是对进程想要写入的文件的特定段进行锁定。基本上每个进程都会写一行。我不确定高负载系统有多好。

请为此问题提出一些解决方案。

3 个答案:

答案 0 :(得分:1)

0mq实例处理写入(正如您最初为套接字所建议的那样)并让工作人员连接到它并将其写入添加到队列中(example以多种语言)。

答案 1 :(得分:0)

每个进程都可以写入自己的文件(pid.temp)并定期重命名文件(pid-0.data,pid-1.data,...)以获取可以获取所有这些文件的主进程。

答案 2 :(得分:0)

你可能不需要构建这样的东西。如果您不想阻止进程,请使用perl flockLOCK_NB标记。定期尝试flock。如果不成功则继续处理,并且值可以存储在数组中。如果文件已锁定,请从阵列中将数据写入其中。