您的位置:首页 > 其它

多线程切割查找

2016-01-17 20:32 274 查看
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <process.h>
#include <Windows.h>

struct findInfo
{
int *pstart;//首地址
int length;
int findNum;//要查找的数据
int id;//编号
};

int flag = 1;

void findIt(void *p)
{
if (flag == 1)
{

findInfo *ps = (findInfo *)p;
printf("\n线程:%d开始查找", ps->id);
//遍历首地址,长度10个元素
for (int *pf = ps->pstart; pf < ps->pstart + ps->length; pf++)
{
if (*pf == ps->findNum)//相等
{
printf("\n线程%d结束查找,找到数据%d地址%p", ps->id, *pf, pf);
flag = 0;
return;
}
}

printf("\n线程:%d结束查找,没有找到", ps->id);
}
else
{
printf("\n其他线程已找到,结束查找");
}
}

void main()
{
int a[100] = { 0 };
time_t ts;
unsigned int data = time(&ts);
srand(data);

for (int i = 0; i < 100; i++)
{
a[i] = rand() % 100;
printf("%4d", a[i]);
if ((i + 1) % 10 == 0)
{
printf("\n");
}
}

int num;
scanf("%4d", &num);
struct findInfo info[10];//结构体数组

for (int i = 0; i < 10; i++)
{
info[i].pstart = a + 10 * i;
info[i].length = 10;
info[i].id = i;
info[i].findNum = num;
HANDLE hd = (HANDLE)_beginthread(findIt, 0, &info[i]);
WaitForSingleObject(hd, INFINITE);//线程等待,一个一个执行

}

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: