Я делаю функцию, которая читает данные файла через несколько потоков.Каждый поток читает различные блоки файла, так что вся операция чтения файла выполняется несколькими потоками.Но я понятия не имею, как получить разные указатели файлов для каждого потока.
Я пытаюсь сделать так, чтобы каждый поток считывал определенную файловую область, чтобы несколько потоков могли прочитать весь файл в кратчайшие сроки.
Любые предложения приветствуются, и, пожалуйста, сообщите мне, если есть какие-либо логические недостатки.
код до сих пор
void fstreamExtension::readBytesMultiThreaded (std::vector<char>& vBuff)
{
long long int threadBytes [4] = {0, 0, 0, 0};
//these if else statements calculate how many bytes each thread should read, basically file size in bytes is calculated from fileSize() and divided among threads.
if(this -> fileSize() % 2 == 0)
{
threadBytes[0] = this -> fileSize() / 2;
if(threadBytes[0] % 2 == 0)
{
threadBytes[0] /= 2;
threadBytes[1] = threadBytes[0];
threadBytes[2] = threadBytes[0];
threadBytes[3] = threadBytes[0];
}
else
{
threadBytes[0] = (threadBytes[0] - 1) / 2;
threadBytes[1] = threadBytes[0] + 1;
threadBytes[2] = threadBytes[0];
threadBytes[3] = threadBytes[1];
}
}
else
{
threadBytes[0] = (this -> fileSize() - 1) / 2;
if(threadBytes[0] % 2 == 0)
{
threadBytes[0] /= 2;
threadBytes[1] = threadBytes[0];
threadBytes[2] = threadBytes[0];
threadBytes[3] = threadBytes[0] + 1;
}
else
{
threadBytes[0] = (threadBytes[0] - 1) / 2;
threadBytes[1] = threadBytes[0] + 1;
threadBytes[2] = threadBytes[0] + 1;
threadBytes[3] = threadBytes[0] + 1;
}
}
}
данные, прочитанные потоками, будут объединены в одинвекторный тип буфера принят в качестве аргумента функции.
скажем, у меня есть 4 строки в файле.
-линии 1
-линии 2
-линии3
-линии 4
я хочу создать четыре потока, нить 1 будет читать строку 1, нить 2 будет читать строку 2, нить 3 будет читать строку 3, нить 4 будет читать строку 4.Обратите внимание, что я буду использовать только 4 темы.
Я спрашиваю, что для каждого потока мне может понадобиться поместить указатель файла в начале строки, которую должен прочитать поток.Для 4 потоков для одновременного чтения файла могут потребоваться четыре файловых указателя.Итак, я хочу знать, как иметь несколько файловых указателей для одного файла.
Вы можете связать каждую строку с блоком файла, процесс чтения остается тем же.
Пожалуйста, предложите, если естьдля этого доступно другое решение, кроме нескольких файловых указателей.
спасибо!