多线程切割查找
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <time.h> 5 #include <process.h> 6 #include <Windows.h> 7 8 struct findInfo 9 { 10 int *pstart;//首地址 11 int length; 12 int findNum;//要查找的数据 13 int id;//编号 14 }; 15 16 int flag = 1; 17 18 void findIt(void *p) 19 { 20 if (flag == 1) 21 { 22 23 findInfo *ps = (findInfo *)p; 24 printf("\n线程:%d开始查找", ps->id); 25 //遍历首地址,长度10个元素 26 for (int *pf = ps->pstart; pf < ps->pstart + ps->length; pf++) 27 { 28 if (*pf == ps->findNum)//相等 29 { 30 printf("\n线程%d结束查找,找到数据%d地址%p", ps->id, *pf, pf); 31 flag = 0; 32 return; 33 } 34 } 35 36 printf("\n线程:%d结束查找,没有找到", ps->id); 37 } 38 else 39 { 40 printf("\n其他线程已找到,结束查找"); 41 } 42 } 43 44 45 void main() 46 { 47 int a[100] = { 0 }; 48 time_t ts; 49 unsigned int data = time(&ts); 50 srand(data); 51 52 for (int i = 0; i < 100; i++) 53 { 54 a[i] = rand() % 100; 55 printf("%4d", a[i]); 56 if ((i + 1) % 10 == 0) 57 { 58 printf("\n"); 59 } 60 } 61 62 int num; 63 scanf("%4d", &num); 64 struct findInfo info[10];//结构体数组 65 66 for (int i = 0; i < 10; i++) 67 { 68 info[i].pstart = a + 10 * i; 69 info[i].length = 10; 70 info[i].id = i; 71 info[i].findNum = num; 72 HANDLE hd = (HANDLE)_beginthread(findIt, 0, &info[i]); 73 WaitForSingleObject(hd, INFINITE);//线程等待,一个一个执行 74 75 } 76 77 system("pause"); 78 }