处理多个线程的文件C ++

时间:2017-02-21 17:31:17

标签: c++ concurrency ifstream

我一直在尝试处理input.txt文件的单词,该文件基本上由大文本(可变大小)组成。想法是拆分这个文件并在多个线程中通过块处理它(为了简单起见,我将忽略多线程部分,但最终将是我的目的)。例如,给出这个文本:

The quick brown fox jumps over the lazy dog\n
The quick brown fox jumps over the lazy dog\n
The quick brown fox jumps\n
over the lazy dog

如果我想在6个不同的线程中计算这个文件,我将它分成6个块:

The quick brown fox jumps(注意最后的空格)

over the lazy dog\n

The quick brown fox jumps(注意最后的空格)

over the lazy dog\n

The quick brown fox jumps\n

over the lazy dog

为此,我会有类似的内容:

std::ifstream file("input.txt");
file.seekg(0, file.end);
int length = file.tellg();
file.seekg(0, file.beg);

int chunkLength = length/numThreads;
for(i=0; i < numThreads; i++) {
    processChunk(i*chunkLength, (i+1)*chunkLength+1);
}

processChunk函数与此类似(为简单起见忽略线程):

void processChunk(int initPos, int endPos) {
    std::ifstream file("input.txt");
    file.seekg(initPos);
    // process it until endPos is reached
    file.close()
}

我主要关心的是拆分文件的逻辑,因为我应该确保按字词拆分,所以如果拆分是来自m的字符example,我应该减少开始和结束指针以达到\nwhitespace(直到e字符)。

但这意味着许多假设,比如认为input.txt不会包含一个重叠超过两个块的单词,以及其他一些单词。

我想知道是否有更好的方法可以通过单词分割文件来独立处理块,并尽可能快地处理这种假设。

谢谢!

0 个答案:

没有答案