打开文件并跨多个线程向其写入流是否安全?如果没有,我可以实现什么来保证它的安全性?
发布于 2013-05-14 00:20:08
不,标准FileStream不是线程安全的。
您应该使用var safe = Stream.Synchronized(File.Open(...));创建线程安全的包装器。
Stream.Synchronized() on MSDN
发布于 2013-05-14 00:21:15
不是的。这不是线程安全的。直观地说,当索引是一个移动目标时,如何写入文件?一个想法是创建单独的文件,并将它们与另一个进程结合起来,可能是由某种已完成的事件触发的(例如,所有文件都已到达)。
使用多个线程写入单个文件的概念有一些代码味道。国际海事组织,重新检查您的选择,并提出一个不同的方法来解决这个问题。
发布于 2013-05-14 00:27:21
不,它本身并不安全,但是您可以使用lock关键字来控制对FileStream对象的跨线程访问。
例如:
FileStream fStream = File.Open('foo.txt', FileMode.Append);
lock (fStream)
{
// Some operation on fStream
}在这种情况下,Knaģ发布的答案可能是可行的,但使用lock关键字的互斥锁是更通用的解决方案。
https://stackoverflow.com/questions/16526652
复制相似问题