本博文源于笔者正在学习的c语言。学习如何用多线程进行检索数据。这里以检索一个数组的数据为例,给出代码,并分析如何进行线程通信,如果检索到,其余就别检索了。
想要用多线程检索数据
#define _CRT_SECURE_NO_WARNINGS
#include<Windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<time.h>
#include<process.h>
int isfind = 0;
struct findinfo {
int *pstart;
int length;
int findnum;
int id;
};
void findit(void *p) {
struct findinfo *ps = p;
printf("\n线程%d开始查找", ps->id);
for (int *pf = ps->pstart; pf < ps->pstart + ps->length; pf++) {
if (isfind == 1) {
printf("\n线程%d结束查找,其他线程已经找到", ps->id);
return;
}
if (*pf == ps->findnum) {
printf("线程%d,数据%d,地址%p", ps->id, *pf, pf);
isfind = 1;
return;
}
}
printf("\n线程%d,结束查找", ps->id);
}
void main() {
int a[10] = { 86,53,25,12,10,11,18,5,3,4 };
for (int i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
printf("\n想要查找的数据是:");
int num;
scanf("%d", &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;
_beginthread(findit ,0, &info[i]);
}
getchar();
getchar();
}
这段代码效果,通过全局变量作为线程通信的变量,实现了,查找成功就不让其他线程查找了。值得收藏借鉴。