multithreading文件编写

我试图使用多个线程写入大文件的不同部分,就像分段文件下载器一样。

我的问题是,这样做的安全方法是什么? 我是否打开文件进行编写,创建我的线程,将Stream对象传递给每个线程? 我不希望发生错误,因为多个线程可能同时访问同一个对象。

顺便说一下,这是C#。

我个人建议你在多个线程中获取数据,但实际上是从一个线程写入它。 这种方式可能会相当简单。 您可以使用生产者/消费者队列(在.NET 4中非常容易),然后每个生产者都会提供“索引,数据”对。 然后,消费者线程可以依次寻找,写入,搜索,写入等。

如果这是Linux编程,我建议您查看pwrite()命令,该命令将缓冲区写入给定偏移量的文件。 粗略搜索C#文档并没有出现这样的情况。 有谁知道是否存在类似的function?

虽然一个人可能能够打开指向同一文件的多个流,并在每个线程中使用不同的流,但我会建议使用单个线程进行写入而没有其他原因。 即使两个或多个线程可以安全地同时写入同一个文件,这并不意味着它是个好主意。 让统一线程尝试以合理的顺序对写入进行排序以避免大量随机搜索可能会有所帮助; 这样做的性能优势将取决于操作系统如何有效地缓存和安排随机写入。 如果事实certificate操作系统做得不错,请不要疯狂地优化这些事情,但如果操作系统默认行为结果表现不佳,请准备好添加一些优化。