20200212 数据结构和算法之 并行搜索 天下武功,唯快不破

#include <Windows.h>
#include <stdio.h>
#include <iostream>
#include <time.h>

#define TEST_SIZE (1024*1024*200)
#define NUMBER  20

int total = 0;

typedef struct _search {
	int* data;    //搜索的数据集
	size_t start;  //搜索的开始位置
	size_t end;    //搜索的终止位置
	size_t count;  //搜索结果
} search;


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->data[i] == NUMBER) {
				s->count++;
			}
		}
	}
	time(&end);

	printf("查找数据所花时间: %lld\n", end - start);
	return 0;
}

int main(void)
{
	int* data = new int[TEST_SIZE];

	for (int i = 0; i < TEST_SIZE; i++) {
		data[i] = i;
	}

	search s1, s2;
	int mid = TEST_SIZE / 2;

	s1.data = data;
	s1.start = 0;
	s1.end = mid;
	s1.count = 0;
	
	s2.data = data;
	s2.start = mid + 1;
	s2.end = TEST_SIZE - 1;
	s2.count = 0;

	DWORD threadID1;//线程1的身份证
	HANDLE hThread1;//线程1的句柄

	DWORD threadID2;//线程2的身份证
	HANDLE hThread2;//线程2的句柄

	printf("创建线程... ... \n");
	//创建线程1
	hThread1 = CreateThread(NULL, 0, ThreadProc, &s1, 0, &threadID1);
	//system("pause");

	//创建线程2
	hThread2 = CreateThread(NULL, 0, ThreadProc, &s2, 0, &threadID2);

	//printf("total: %d\n", total);
	if (hThread1 && hThread2) {
		WaitForSingleObject(hThread1, INFINITE);
		WaitForSingleObject(hThread2, INFINITE);
	}
	printf("\n进程爸爸欢迎线程的归来!搜索的结果cout:%d\n",s1.count+s2.count);

	//s1.count+s2.count   最终的结果


	system("pause");
	return 0;
}
int main_back(void) {
	int* data = NULL;
	int count = 0; //记录
	data = new int[TEST_SIZE];//200M * 4 = 800M bytes

	for (int i = 0; i < TEST_SIZE; i++) {
		data[i] = i;
	}
	time_t start, end;//自 1970 年 1 月 1 日 0:00 (UTC) 时起的秒数

	time(&start);
	for (int j = 0; j < 10; j++) {  //8G 数据中统计某个数字出现的次数 800M*10

		for (int i = 0; i < TEST_SIZE; i++) {
			if (data[i] == NUMBER) {
				count++;
			}
		}
	}

	time(&end);

	printf("查找数据所花时间: %lld\n", end - start);

	system("pause");

	return 0;

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值