让多个线程同时读取文件的最佳方法是什么?

时间:2017-10-29 22:43:16

标签: c multithreading file pthreads

让多个线程同时读取文件的最佳方法是什么?

例如,如果我告诉我的程序运行4个线程并且文件长度为12个字符,我希望每个线程同时读取3个字符。

这是我到目前为止所拥有的:

线程功能:

void *thread(void *arg) {
    // can't seem to find the right solution to make it work here...
}

主要功能(thread_count是线程数,text_size是文本大小):

// Number of characters each thread should read
uint16_t thread_chars_num = (text_size / thread_count);

pthread_t threads[thread_count];
for (int i = 0; i < thread_count; i++) {
    if(i == thread_count - 1) { // last thread might have more work
        thread_chars_num += (text_size % thread_count )
    }
    if (pthread_create(&threads[i], NULL, thread, &thread_chars_num) != 0) {
        fprintf(stderr, "pthread_create failed!\n");
      return EXIT_FAILURE;
    }
}

我在考虑为线程函数提供一个带索引的结构来开始阅读和索引来停止阅读,但它确实令人困惑,我似乎无法找到正确的解决方案。

1 个答案:

答案 0 :(得分:1)

假设您有一个类似的结构:

struct ft 
{
    char* file_name;
    int start_index;
    int end_index;
};

然后在你的主题中:

void *thread(void *arg) {
    int i;
    int c;
    struct ft* fi = (struct ft*)arg;
    FILE* file = fopen(fi->file_name);
    fseek (file , fi->start_index, SEEK_SET);
    for(i = 0; i < fi->end_index - fi->start_index; i++)
    {
        c = getc(file);
        //do something
    }
}

另外,不要忘记在主线程中执行pthread_join,这将使其等待其他线程完成。