多线程切割查找

 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 }

 

posted @ 2016-01-17 20:32  喵小喵~  阅读(337)  评论(0编辑  收藏  举报