读书人

多线程字符串匹配解决办法

发布时间: 2012-04-25 19:32:32 作者: rapoo

多线程字符串匹配
小弟是名编程菜鸟,最近学习操作系统老师给出个编程题目,实在不知道该怎么编所以向各位请教
字符型文本数据存放于data文件中,文件大约1MB。程序运行后,读入data文件到内存,提示用户输入想查找的字符串,然后提示用户想使用多少个线程并行查找,根据用户的输入,建立相应数量的线程,每个线程负责查找data文件的一部分内容,每次找到一个匹配的位置,就向result文件中写入一行记录,格式如下:线程编号,当前匹配位置是该线程发现的第几处匹配位置,匹配位置前后的10个字符。每个线程负责统计该线程一共找到了多少个符合条件的位置,并把数目报告给主线程,最后,由主线程给出用户想查找的字符串一共出现了多少次,并输出到屏幕

[解决办法]
这个问题很简单,主线程分配从data的哪个位置开始读,读到哪个位置结束。
int dataLength = data串长度;
int matchLength = 被匹配串长度;
int n = 线程数;
int step = dataLength / n;
for(int i = 0; i < n; i++)
{
? int start = i*n;
? int endPos = i*(n+1)-1 + matchLength; // 注意这里是通用的,最后一个线程的结束位置需要做点处理。
? // 启线程,并给出起始位置,结束位置;
}

主线程开始等待其它线程,直到所有线程结束。输出result的结果。


然后线程里实现查找算法。向result写数据时,加入临界同步,即可安全访问。



读书人网 >C++

热点推荐