并行搜索

并行搜索

并发的基本概念

所谓并发是在同一实体上的多个事件同时发生。并发编程是指在在同一台计算机上“同时”处理多个任务。
在这里插入图片描述

要理解并发编程,我们必须要理解如下一些 基本概念:
在这里插入图片描述
进程就像工厂里的车间,承担“工厂”里的各项具体的“生产任务”,通常每个进程对应一
个在运行中的执行程序,比如,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;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值