所以我的最终目标是允许多个线程从头到尾读取同一文件。例如,如果文件为200字节:
Thread A 0-> 200 bytes
Thread B 0-> 200 bytes
Thread C 0-> 200 bytes
等
基本上让每个线程都读取整个文件。该软件仅读取该文件,而不写入。
所以我打开文件:
fd = open(filename,O_RDWR|O_SYNC,0);
,然后在每个线程中简单地循环文件。因为我只创建一个文件描述符,所以还要使用dup在每个线程中创建一个文件描述符的副本
这是线程函数的最小示例:
void ThreadFunction(){
int file_desc= dup(fd);
uint32_t nReadBuffer[1000];
int numBytes = -1;
while (numBytes != 0) {
numBytes = read(file_desc,&nReadBuffer,sizeof(nReadBuffer));
//processing on the bytes goes here
}
}
但是,我不确定这是否正确地遍历了整个文件,而是每个线程都以某种方式菊花链链接了整个文件。
这种方法正确吗?我为正在处理的项目继承了此软件,文件描述符在mmap调用中使用,因此我不确定O_RDWR或O_SYNC问题