打开文件并跨多个线程向其写入流是否安全?如果没有,我可以实施什么来确保安全?
问问题
690 次
3 回答
3
不,标准 FileStream 不是线程安全的。
您应该使用var safe = Stream.Synchronized(File.Open(...));
来创建线程安全的包装器。
于 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 回答