【发布时间】:2014-12-01 19:15:10
【问题描述】:
比如说,我有一个包含 10 段的文件。我有 10 个线程可以独立读取这些段落并将数据提供给主线程。
如何打开这个文件,以便我的处理程序准确地位于它应该读取的位置。说,我知道每段有多少字节。
我知道我可以遍历字节并到达我想要的部分,但我想要一个更快的方法。有吗?
【问题讨论】:
-
如果每个线程都有自己的文件描述符,可以正常使用lseek()。如果您尝试共享一个文件描述符,则需要处理一个线程的 lseek() 和另一个线程的 read() 之间的竞争。
-
更好 - 如果您的操作系统有它,请使用结合 lseek() 和 read/v/() 的 pread() 或 preadv(),而不更改文件指针。
-
知道了,谢谢两位!
-
正如@Arlie Stephens 所说,使用
lseek()并且可能所有线程都以"r"读取模式打开文件,而不是通过写入文件来使事情复杂化。
标签: c multithreading file-handling