并行搜索
并发的基本概念
所谓并发是在同一实体上的多个事件同时发生。并发编程是指在在同一台计算机上“同时”处理多个任务。
要理解并发编程,我们必须要理解如下一些 基本概念:
进程就像工厂里的车间,承担“工厂”里的各项具体的“生产任务”,通常每个进程对应一
个在运行中的执行程序,比如,QQ 和微信运行的时候,他们分别是不同的进程。
测试代码如下
#include<stdio.h>
#include<Windows.h>
#include<time.h>
#include<iostream>
using namespace std;
#define NUMBER 20
#define TEST_SIZE (1024*1024*200)
typedef struct _search{
int *date;
size_t start;
size_t end;
size_t count;
}search;
//线程,并发WINAPIWindows平台的API
DWORD WINAPI ThreadProc(void *lpParam){
search *s = (search*)lpParam;
time_t start,end;
printf("新的线程开始执行\n");
time(&start);
for(int j=0;j<10;j++){
for(size_t i=s->start;i<=s->end;i++){
if(s->date[i]==NUMBER){
s->count++;
}
}
}
time(&end);
printf("查询数据所花的时间:%11d\n",end-start);
return 0;
}
int main(void){
int *date = NULL;
int count = 0;
int mid = 0;
search s1,s2;
date = new int[TEST_SIZE];
for(int i=0;i<TEST_SIZE;i++){
date[i] = i;//给date赋初值
}
mid = TEST_SIZE/2;
s1.date = date;
s1.start = 0;
s1.count = 0;
s1.end = mid;
s2.date = date;
s2.start = mid+1;
s2.end = TEST_SIZE-1;
s2.count = 0;
DWORD threadID1;
HANDLE hThread1;
DWORD threadID2;
HANDLE hThread2;
printf("创建线程... ...\n");
hThread1 = CreateThread(NULL,0,ThreadProc,&s1,0,&threadID1);
hThread2 = CreateThread(NULL,0,ThreadProc,&s2,0,&threadID2);
WaitForSingleObject(hThread1,INFINITE);
WaitForSingleObject(hThread2,INFINITE);
system("pause");
return 0;
}