并发文件写入

如何写入可由多个源访问的文本文件(可能以并发方式),确保没有写入操作丢失?

就像,如果两个不同的进程在同一时刻写入文件,这可能会导致问题。 简单的解决方案(不是非常快速而且不是非常优雅)将在开始进程(创建.lock文件或类似文件)时锁定文件并在写入完成时释放它(删除锁定)。

当开始写时,我会检查.lock文件是否存在并延迟写入直到文件被释放。

对于这种情况,建议的模式是什么?

谢谢

编辑我的意思是进程,如来自不同客户端的不同程序,不同用户等,而不是同一程序中的线程

考虑使用简单的数据库。 您将获得所有这些内置安全性相对容易。

同步进程之间访问的最快方法是使用互斥锁/信号量。 该线程回答了如何使用它们来模拟读写器锁模式: 是否有全局命名的读/写锁?

我建议使用ReaderWriterLock。 它专为多个读卡器设计,但确保只有一个编写器可以在任何时候MSDN编写数据 。

我会看一下这样的命令模式 。 并发写作将成为数据完整性的噩梦。

基本上,您使用此模式对写入命令进行排队,以便按请求顺序完​​成。

您还应该使用ReaderWriterLock来确保在写入时可以从文件中读取。 这将是命令模式背后的第二道防线,因此在给定时间只有一个线程可以写入文件。

你也可以尝试锁定。 这很容易 – “锁定确保一个线程不进入关键部分而另一个线程处于代码的关键部分。如果另一个线程试图输入锁定的代码,它将等待(阻塞)直到释放该对象。”

http://msdn.microsoft.com/en-us/library/c5kehkcz%28VS.71%29.aspx

我还建议你寻找有多个读者的例子,在一个关键部分只有一个作者,这是一篇很好的解决方案的简短论文http://arxiv.org/PS_cache/cs/pdf/0303/0303005v1.pdf

或者,您可以查看每次请求时创建文件的副本,以及何时将任何更改写入与原始文件合并的文件。