码迷,mamicode.com
首页 > 其他好文 > 详细

pthread读文本文件

时间:2016-04-17 09:08:11      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:pthread   文本文件   

#include <pthread.h>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

#define LINE_PER_THREAD 1024

pthread_mutex_t count_mutex = PTHREAD_MUTEX_INITIALIZER;

struct param{

    vector<string> vstr;
    int offset;
    int tidx;

};

//kernel function
void * std_output(void *pa){
    struct param *local = (struct param *) pa;
    vector<string> vstr = local->vstr;
    int offset = local->offset;
    int tidx = local->tidx;

    pthread_mutex_lock(&count_mutex);
    int count = 0;
    int i = offset;
    while(i < vstr.size() && i < offset + LINE_PER_THREAD){
        count++;
        i++;
    }
    cout << " thread " << tidx << " has " << count << " lines" << endl;
    pthread_mutex_unlock(&count_mutex);

}

int main(){

    ifstream input_data("input.txt");
    int line_num = 0;
    string line;
    vector<string> vstring;
    while(input_data.is_open()){
        if(!input_data.eof()){
            getline(input_data, line);
            vstring.push_back(line);
            line_num++;
        }
        else{
            cout << line_num << endl;
            break;
        }
    }
    input_data.close();

    int THREAD_NUM = (line_num + LINE_PER_THREAD - 1) / LINE_PER_THREAD;
    pthread_t threads[THREAD_NUM];
    for(int i = 0; i < THREAD_NUM; i++){
        struct param *str_param = new param();
        str_param->vstr = vstring;
        str_param->offset = i * LINE_PER_THREAD;
        str_param->tidx = i;
        pthread_create(&threads[i], NULL, std_output, (void *) str_param);
    }

    for(int i = 0; i < THREAD_NUM; i++)
        pthread_join(threads[i], NULL);

    return 0;
}
  1. 读一个文本文件,首先统计一下文本行数;

  2. 按每行分1024行,计算一下一共需要多少线程; 计算的时候,可以使用公式(N + 1023) / 1024,其中N是该文本文件总行数;

  3. std_output是一个kernel函数,使用mutex锁,其中,根据偏移量offset来决定处理哪一部分数据。该程序仅仅是打印出某一部分包含多少行。

输出:

18207
 thread 0 has 1024 lines
 thread 1 has 1024 lines
 thread 2 has 1024 lines
 thread 3 has 1024 lines
 thread 4 has 1024 lines
 thread 5 has 1024 lines
 thread 6 has 1024 lines
 thread 7 has 1024 lines
 thread 8 has 1024 lines
 thread 9 has 1024 lines
 thread 10 has 1024 lines
 thread 11 has 1024 lines
 thread 12 has 1024 lines
 thread 13 has 1024 lines
 thread 14 has 1024 lines
 thread 15 has 1024 lines
 thread 16 has 1024 lines
 thread 17 has 799 lines

本文出自 “胡一刀” 博客,谢绝转载!

pthread读文本文件

标签:pthread   文本文件   

原文地址:http://11190017.blog.51cto.com/11180017/1764657

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!