Таким образом, моя конечная цель - разрешить нескольким потокам читать один и тот же файл от начала до конца. Например, если размер файла составляет 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 имеют значение