#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;
}
20200212 数据结构和算法之 并行搜索 天下武功,唯快不破
最新推荐文章于 2022-01-07 15:54:13 发布