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

时间:2011-09-27 17:29:48

标签: c# multithreading

我有一个在多线程上运行的程序,但所有这些程序都需要将结果保存到同一个文本文件

我收到访问冲突错误

我怎么能避免这样做

4 个答案:

答案 0 :(得分:3)

将文件IO换行到lock statement

private static object _syncRoot = new object();

然后:

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

答案 1 :(得分:1)

答案 2 :(得分:1)

最简单的方法是简单地确保你有一些锁定构造(互斥,监视器等)来防止访问文件,然后每个线程都可以单独访问它。这可能是访问相同的底层Stream / TextWriter / etc,也可能是在锁定区域内打开/关闭文件。

更复杂的方法是拥有专用的编写器线程和同步的工作队列。然后,所有线程都可以添加到队列中,并且单个线程会起草并写入该文件。这意味着您的主线程仅在添加到队列时被阻止(非常简短),而不是在IO上阻塞(更慢)。但请注意,如果进程异常退出,队列中的数据可能会丢失。

答案 3 :(得分:0)

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

ReaderWriterLock
ReaderWriterLockSlim