1

打开文件并跨多个线程向其写入流是否安全?如果没有,我可以实施什么来确保安全?

4

3 回答 3

3

不,标准 FileStream 不是线程安全的。

您应该使用var safe = Stream.Synchronized(File.Open(...));来创建线程安全的包装器。

Stream.Synchronized()在 MSDN 上

于 2013-05-13T16:20:08.113 回答
1

不,这不是线程安全的。直观地说,当索引是移动目标时,如何写入文件?一个想法是创建单独的文件并将它们与另一个进程组合​​,可能由某种完成的事件触发(例如所有文件到达)。

使用多个线程写入单个文件的概念有一些代码味道。IMO,重新检查您的选择并提出解决此问题的不同方法。

于 2013-05-13T16:21:15.113 回答
1

不; 它本身并不安全,但您可以使用lock关键字来控制对 FileStream 对象的跨线程访问。

例如:

FileStream fStream = File.Open('foo.txt', FileMode.Append);

lock (fStream)
{
  // Some operation on fStream
}

Knaģis 发布的答案可能是在这种情况下要走的路,但使用lock关键字锁定互斥锁是更通用的解决方案。

于 2013-05-13T16:27:20.957 回答