如何在多线程环境中写入文件

本文关键字:文件 环境 多线程 | 更新日期: 2023-09-27 18:09:56

我有一个程序,运行在多线程,但他们都需要保存结果到相同的文本文件

I get access violation error

我怎样才能避免这样做

如何在多线程环境中写入文件

将文件IO封装到锁语句中:

private static object _syncRoot = new object();

然后:

lock(_syncRoot)
{
    // do whatever you have to do with this file
}

看一下锁语句:http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx

最简单的方法是确保对文件的访问具有某种锁定结构(互斥锁、监视器等),然后每个线程都可以单独访问它。这可能是访问相同的底层流/文本写入器等,也可能是打开/关闭锁定区域内的文件。

一个更复杂的方法是有一个专用的写线程和一个同步的工作队列。然后,所有线程都可以添加到队列中,单个线程起草并写入文件。这意味着主线程只在添加队列时被阻塞(非常短暂),而不是在IO时被阻塞(较慢)。但是,如果进程异常退出,可能导致队列中的数据丢失。

我建议阅读ReaderWriterLock类或ReaderWriterLockSlim类,这是更快的,但有一些陷阱,我相信它会完全满足您的需求。

ReaderWriterLock
ReaderWriterLockSlim