многопоточность — используйте несколько файловых указателей для одного файла в переполнении стека

Я делаю функцию, которая читает данные файла через несколько потоков. Каждый поток читает разные блоки файла, так что вся операция чтения файла выполняется несколькими потоками. Но я понятия не имею, как получить разные указатели файлов для каждого потока.

Я пытаюсь сделать так, чтобы каждый поток считывал определенную файловую область, так что несколько потоков могут прочитать весь файл в кратчайшие сроки.

Любые предложения приветствуются, и, пожалуйста, скажите, если есть какие-либо логические недостатки.

код до сих пор

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 потоков для одновременного чтения файла могут потребоваться четыре файловых указателя. Итак, я хочу знать, как иметь несколько файловых указателей для одного файла.

Вы можете связать каждую строку с блоком файла, процесс чтения остается тем же.

Пожалуйста, предложите, если есть другие решения для этого, кроме нескольких файловых указателей.

Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]