假设我有以下代码,我打开一个文件,逐行读取内容,然后将每一行用于其他地方的一个函数,然后当我完成后倒回文件。
FILE *file = Open_File();
char line[max];
while (!EndofFile())
{
int length = GetLength(line);
if (length > 0)
{
DoStuffToLine(line)
}
}
rewind(file);
我想知道这里有没有办法使用线程来增加并发。由于我只是阅读文件而不是写入文件,所以我觉得我不必担心竞争调节。但是我不确定如何处理 while 循环中的代码,因为如果一个线程在文件上循环而另一个线程同时在文件上循环,它们是否会导致彼此跳过行,使其他错误等?解决这个问题的好方法是什么?
最佳答案
如果您试图通过这样做来提高读取性能,您可能会感到失望,因为这几乎肯定会受到磁盘 I/O 的限制。添加更多线程不会帮助操作系统和磁盘 Controller 更快地获取数据。
但是,如果您只想并行处理数据,那就是另一回事了。在那种情况下,我会将整个文件读入某处的内存缓冲区,然后让您的线程并行处理它。这样一来,您就不必担心通过倒带文件指针或任何其他类似的烦人问题来解决线程安全问题。
当然,您可能仍然需要为多线程部分使用其他锁定机制,具体取决于您在做什么,但您不必担心标准库在您开始时会做什么使用多个线程访问文件。
关于c - 文件的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13407014/