#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”);

}