#includeint flag = 1;//标志位,便于各进程之间进行通信
int *destPtr = NULL;//所查找元素的目标地址,设置为NULL是为了避免野指针
struct MultiSearch{
int len;//要查找的长度
int data;//要查找的数据
int *beg;//要查找的起始地址
int *sflag;//标志位,便于各进程之间进行通信
int **addr;//产地一个指针的地址
int index;//进程编号
};
void find(void *ptr)
{
struct MultiSearch *pstruct = (struct MultiSearch *)ptr;
for (int *pbeg = pstruct->beg; pbeg != pstruct->beg + pstruct->len; pbeg++)
{
Sleep(30);//留出一些时间,让其他线程查找
if (*(pstruct->sflag) == 0)//判断是否找到,如果找到,则终止程序
{
printf(“本线程%d无能,其他线程已经找到。\n”, pstruct->index);
return;//结束该线程,本线程以后的程序不再执行
}
if (pstruct->data == *pbeg)//判断该元素是否和查找的元素相等,如果相等,则返回,其他进程也相应结束查找
{
printf(“第%d个线程查找到该内容.\n”, pstruct->index);
*(pstruct->sflag) = 0;//标志位设为0;
*(pstruct->addr) = pbeg;//将找到的地址赋予结构体内的元素
return;//结束进行
}
}
printf(“本线程%d无能,没有找到该元素。\n”, pstruct->index);
return;//正常结束
}
void main()
{
int arr[1000] = { 0 };//从1000个数中查找num;
for (int i = 0; i < 1000; i++)//为数组赋值
arr[i] = i + 1;
int num = 0;
printf(“请输入要查找的数字(仅限于0到999的整数类型):”);
scanf(“%d”, &num);
struct MultiSearch ms[10];//申请十个结构类型,为避免各个线程之间的数据交叉,使每个线程中的数据都是独立的
for (int i = 0; i < 10; i++)//创建10个线程进行查找,每个线程查找其中的一百个元素
{
ms[i].beg = arr + i * 100;
ms[i].len = 100;
ms[i].data = num;
ms[i].sflag = &flag;
ms[i].addr = &destPtr;
ms[i].index = i;
_beginthread(find, 0, &ms[i]);
Sleep(50);//为创建进程留出时间
}
Sleep(3000);//等待查找结束
system(“pause”);//如果主线程结束了,则其他的线程也相应结束了,因此要为主线程预留足够多的时间
printf(“\n%p, %d\n”, destPtr, *destPtr);//打印该元素的地址及其该地址所对应的数据
system(“pause”);
}