并发文件写入

pis*_*hio 8 c# concurrency logging

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

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

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

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

谢谢

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

Ian*_*Ian 1

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

  • 不要使用ReaderWriterLock,它的性能很差。使用 ReaderWriterLockSlim 或 Wintellect PowerThreading 库中 Jeffrey Richter 的锁之一。 (3认同)
  • 两者都不要使用;)。ReadWriter 锁、监视器(锁)等不能进行进程间锁,这就是作者的意思(例如,如果两个不同的进程在同一时刻写入文件)? (2认同)